DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/GunsCodeGenerator.java
New file @@ -0,0 +1,30 @@ package com.stylefeng.guns.generator.action; import com.stylefeng.guns.generator.action.config.GunsGeneratorConfig; /** * 代码生成器,可以生成实体,dao,service,controller,html,js * * @author stylefeng * @Date 2017/5/21 12:38 */ public class GunsCodeGenerator { public static void main(String[] args) { /** * Mybatis-Plus的代码生成器: * mp的代码生成器可以生成实体,mapper,mapper对应的xml,service */ GunsGeneratorConfig gunsGeneratorConfig = new GunsGeneratorConfig(); gunsGeneratorConfig.doMpGeneration(); /** * guns的生成器: * guns的代码生成器可以生成controller,html页面,页面对应的js */ gunsGeneratorConfig.doGunsGeneration(); } } DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/config/AbstractGeneratorConfig.java
New file @@ -0,0 +1,109 @@ package com.stylefeng.guns.generator.action.config; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; import com.baomidou.mybatisplus.generator.config.GlobalConfig; import com.baomidou.mybatisplus.generator.config.PackageConfig; import com.baomidou.mybatisplus.generator.config.StrategyConfig; import com.baomidou.mybatisplus.generator.config.po.TableInfo; import com.stylefeng.guns.core.util.FileUtil; import com.stylefeng.guns.generator.engine.SimpleTemplateEngine; import com.stylefeng.guns.generator.engine.base.GunsTemplateEngine; import com.stylefeng.guns.generator.engine.config.ContextConfig; import com.stylefeng.guns.generator.engine.config.SqlConfig; import java.io.File; import java.util.List; /** * 代码生成的抽象配置 * * @author fengshuonan * @date 2017-10-28-下午8:22 */ public abstract class AbstractGeneratorConfig { /** * mybatis-plus代码生成器配置 */ GlobalConfig globalConfig = new GlobalConfig(); DataSourceConfig dataSourceConfig = new DataSourceConfig(); StrategyConfig strategyConfig = new StrategyConfig(); PackageConfig packageConfig = new PackageConfig(); TableInfo tableInfo = null; /** * Guns代码生成器配置 */ ContextConfig contextConfig = new ContextConfig(); SqlConfig sqlConfig = new SqlConfig(); protected abstract void config(); public void init() { config(); packageConfig.setService(contextConfig.getProPackage() + ".modular." + contextConfig.getModuleName() + ".service"); packageConfig.setServiceImpl(contextConfig.getProPackage() + ".modular." + contextConfig.getModuleName() + ".service.impl"); //controller没用掉,生成之后会自动删掉 packageConfig.setController("TTT"); if (!contextConfig.getEntitySwitch()) { packageConfig.setEntity("TTT"); } if (!contextConfig.getDaoSwitch()) { packageConfig.setMapper("TTT"); packageConfig.setXml("TTT"); } if (!contextConfig.getServiceSwitch()) { packageConfig.setService("TTT"); packageConfig.setServiceImpl("TTT"); } } /** * 删除不必要的代码 */ public void destory() { String outputDir = globalConfig.getOutputDir() + "/TTT"; FileUtil.deleteDir(new File(outputDir)); } public AbstractGeneratorConfig() { } public void doMpGeneration() { init(); AutoGenerator autoGenerator = new AutoGenerator(); autoGenerator.setGlobalConfig(globalConfig); autoGenerator.setDataSource(dataSourceConfig); autoGenerator.setStrategy(strategyConfig); autoGenerator.setPackageInfo(packageConfig); autoGenerator.execute(); destory(); //获取table信息,用于guns代码生成 List<TableInfo> tableInfoList = autoGenerator.getConfig().getTableInfoList(); if (tableInfoList != null && tableInfoList.size() > 0) { this.tableInfo = tableInfoList.get(0); } } public void doGunsGeneration() { GunsTemplateEngine GunsTemplateEngine = new SimpleTemplateEngine(); GunsTemplateEngine.setContextConfig(contextConfig); sqlConfig.setConnection(dataSourceConfig.getConn()); GunsTemplateEngine.setSqlConfig(sqlConfig); GunsTemplateEngine.setTableInfo(tableInfo); GunsTemplateEngine.start(); } } DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/config/GunsGeneratorConfig.java
New file @@ -0,0 +1,81 @@ package com.stylefeng.guns.generator.action.config; import com.baomidou.mybatisplus.generator.config.rules.DbType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; /** * 默认的代码生成的配置 * * @author fengshuonan * @date 2017-10-28-下午8:27 */ public class GunsGeneratorConfig extends AbstractGeneratorConfig { protected void globalConfig() { globalConfig.setOutputDir("D:\\ttt");//写自己项目的绝对路径,注意具体到java目录 globalConfig.setFileOverride(true); globalConfig.setEnableCache(false); globalConfig.setBaseResultMap(true); globalConfig.setBaseColumnList(true); globalConfig.setOpen(false); globalConfig.setAuthor("stylefeng"); } protected void dataSourceConfig() { dataSourceConfig.setDbType(DbType.MYSQL); dataSourceConfig.setDriverName("com.mysql.jdbc.Driver"); dataSourceConfig.setUsername("root"); dataSourceConfig.setPassword("root"); dataSourceConfig.setUrl("jdbc:mysql://127.0.0.1:3306/guns?characterEncoding=utf8"); } protected void strategyConfig() { strategyConfig.setTablePrefix(new String[]{"sys_"});// 此处可以修改为您的表前缀 strategyConfig.setNaming(NamingStrategy.underline_to_camel); } protected void packageConfig() { packageConfig.setParent(null); packageConfig.setEntity("com.stylefeng.guns.admin.common.persistence.model"); packageConfig.setMapper("com.stylefeng.guns.admin.common.persistence.dao"); packageConfig.setXml("com.stylefeng.guns.admin.common.persistence.dao.mapping"); } protected void contextConfig() { contextConfig.setProPackage("com.stylefeng.guns.admin"); contextConfig.setCoreBasePackage("com.stylefeng.guns.core"); contextConfig.setBizChName("字典管理"); contextConfig.setBizEnName("sysDict"); contextConfig.setModuleName("system"); contextConfig.setProjectPath("D:\\ideaSpace\\guns\\guns-admin");//写自己项目的绝对路径 contextConfig.setEntityName("SysDict"); sqlConfig.setParentMenuName(null);//这里写已有菜单的名称,当做父节点 /** * mybatis-plus 生成器开关 */ contextConfig.setEntitySwitch(true); contextConfig.setDaoSwitch(true); contextConfig.setServiceSwitch(true); /** * guns 生成器开关 */ contextConfig.setControllerSwitch(true); contextConfig.setIndexPageSwitch(true); contextConfig.setAddPageSwitch(true); contextConfig.setEditPageSwitch(true); contextConfig.setJsSwitch(true); contextConfig.setInfoJsSwitch(true); contextConfig.setSqlSwitch(true); } @Override protected void config() { globalConfig(); dataSourceConfig(); strategyConfig(); packageConfig(); contextConfig(); } } DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/config/WebGeneratorConfig.java
New file @@ -0,0 +1,97 @@ package com.stylefeng.guns.generator.action.config; import com.baomidou.mybatisplus.generator.config.rules.DbType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import com.stylefeng.guns.core.support.StrKit; import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.generator.action.model.GenQo; import java.io.File; /** * 默认的代码生成的配置 * * @author fengshuonan * @date 2017-10-28-下午8:27 */ public class WebGeneratorConfig extends AbstractGeneratorConfig { private GenQo genQo; public WebGeneratorConfig(GenQo genQo) { this.genQo = genQo; } @Override protected void config() { /** * 数据库配置 */ dataSourceConfig.setDbType(DbType.MYSQL); dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver"); dataSourceConfig.setUsername(genQo.getUserName()); dataSourceConfig.setPassword(genQo.getPassword()); dataSourceConfig.setUrl(genQo.getUrl()); /** * 全局配置 */ globalConfig.setOutputDir(genQo.getProjectPath() + File.separator + "src" + File.separator + "main" + File.separator + "java"); globalConfig.setFileOverride(true); globalConfig.setEnableCache(false); globalConfig.setBaseResultMap(true); globalConfig.setBaseColumnList(true); globalConfig.setOpen(false); globalConfig.setAuthor(genQo.getAuthor()); contextConfig.setProPackage(genQo.getProjectPackage()); contextConfig.setCoreBasePackage(genQo.getCorePackage()); /** * 生成策略 */ if (genQo.getIgnoreTabelPrefix() != null) { strategyConfig.setTablePrefix(new String[]{genQo.getIgnoreTabelPrefix()}); } strategyConfig.setInclude(new String[]{genQo.getTableName()}); strategyConfig.setNaming(NamingStrategy.underline_to_camel); packageConfig.setParent(null); packageConfig.setEntity(genQo.getProjectPackage() + ".modular.system.model"); packageConfig.setMapper(genQo.getProjectPackage() + ".modular.system.dao"); packageConfig.setXml(genQo.getProjectPackage() + ".modular.system.dao.mapping"); /** * 业务代码配置 */ contextConfig.setBizChName(genQo.getBizName()); contextConfig.setModuleName(genQo.getModuleName()); contextConfig.setProjectPath(genQo.getProjectPath());//写自己项目的绝对路径 if(ToolUtil.isEmpty(genQo.getIgnoreTabelPrefix())){ String entityName = StrKit.toCamelCase(genQo.getTableName()); contextConfig.setEntityName(StrKit.firstCharToUpperCase(entityName)); contextConfig.setBizEnName(StrKit.firstCharToLowerCase(entityName)); }else{ String entiyName = StrKit.toCamelCase(StrKit.removePrefix(genQo.getTableName(), genQo.getIgnoreTabelPrefix())); contextConfig.setEntityName(StrKit.firstCharToUpperCase(entiyName)); contextConfig.setBizEnName(StrKit.firstCharToLowerCase(entiyName)); } sqlConfig.setParentMenuName(genQo.getParentMenuName());//这里写已有菜单的名称,当做父节点 /** * mybatis-plus 生成器开关 */ contextConfig.setEntitySwitch(genQo.getEntitySwitch()); contextConfig.setDaoSwitch(genQo.getDaoSwitch()); contextConfig.setServiceSwitch(genQo.getServiceSwitch()); /** * guns 生成器开关 */ contextConfig.setControllerSwitch(genQo.getControllerSwitch()); contextConfig.setIndexPageSwitch(genQo.getIndexPageSwitch()); contextConfig.setAddPageSwitch(genQo.getAddPageSwitch()); contextConfig.setEditPageSwitch(genQo.getEditPageSwitch()); contextConfig.setJsSwitch(genQo.getJsSwitch()); contextConfig.setInfoJsSwitch(genQo.getInfoJsSwitch()); contextConfig.setSqlSwitch(genQo.getSqlSwitch()); } } DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/model/GenQo.java
New file @@ -0,0 +1,297 @@ package com.stylefeng.guns.generator.action.model; /** * 代码生成的查询参数 * * @author fengshuonan * @date 2017-11-30-下午2:05 */ public class GenQo { /** * 数据库账号 */ private String userName; /** * 数据库密码 */ private String password; /** * 数据库url */ private String url; /** * 项目地址 */ private String projectPath; /** * 作者 */ private String author; /** * 项目的包 */ private String projectPackage; /** * 核心模块的包 */ private String corePackage; /** * 表名称 */ private String tableName; /** * 忽略的表前缀 */ private String ignoreTabelPrefix; /** * 业务名称 */ private String bizName; /** * 模块名 */ private String moduleName; /** * 父级菜单名称 */ private String parentMenuName; /** * 是否生成控制器代码开关 */ private Boolean controllerSwitch = false; /** * 主页 */ private Boolean indexPageSwitch = false; /** * 添加页面 */ private Boolean addPageSwitch = false; /** * 编辑页面 */ private Boolean editPageSwitch = false; /** * 主页的js */ private Boolean jsSwitch = false; /** * 详情页面js */ private Boolean infoJsSwitch = false; /** * dao的开关 */ private Boolean daoSwitch = false; /** * service */ private Boolean serviceSwitch = false; /** * 生成实体的开关 */ private Boolean entitySwitch = false; /** * 生成sql的开关 */ private Boolean sqlSwitch = false; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getProjectPath() { return projectPath; } public void setProjectPath(String projectPath) { this.projectPath = projectPath; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getCorePackage() { return corePackage; } public void setCorePackage(String corePackage) { this.corePackage = corePackage; } public String getProjectPackage() { return projectPackage; } public void setProjectPackage(String projectPackage) { this.projectPackage = projectPackage; } public String getTableName() { return tableName; } public void setTableName(String tableName) { this.tableName = tableName; } public String getIgnoreTabelPrefix() { return ignoreTabelPrefix; } public void setIgnoreTabelPrefix(String ignoreTabelPrefix) { this.ignoreTabelPrefix = ignoreTabelPrefix; } public String getBizName() { return bizName; } public void setBizName(String bizName) { this.bizName = bizName; } public String getModuleName() { return moduleName; } public void setModuleName(String moduleName) { this.moduleName = moduleName; } public Boolean getControllerSwitch() { return controllerSwitch; } public void setControllerSwitch(Boolean controllerSwitch) { this.controllerSwitch = controllerSwitch; } public Boolean getIndexPageSwitch() { return indexPageSwitch; } public void setIndexPageSwitch(Boolean indexPageSwitch) { this.indexPageSwitch = indexPageSwitch; } public Boolean getAddPageSwitch() { return addPageSwitch; } public void setAddPageSwitch(Boolean addPageSwitch) { this.addPageSwitch = addPageSwitch; } public Boolean getEditPageSwitch() { return editPageSwitch; } public void setEditPageSwitch(Boolean editPageSwitch) { this.editPageSwitch = editPageSwitch; } public Boolean getJsSwitch() { return jsSwitch; } public void setJsSwitch(Boolean jsSwitch) { this.jsSwitch = jsSwitch; } public Boolean getInfoJsSwitch() { return infoJsSwitch; } public void setInfoJsSwitch(Boolean infoJsSwitch) { this.infoJsSwitch = infoJsSwitch; } public Boolean getDaoSwitch() { return daoSwitch; } public void setDaoSwitch(Boolean daoSwitch) { this.daoSwitch = daoSwitch; } public Boolean getServiceSwitch() { return serviceSwitch; } public void setServiceSwitch(Boolean serviceSwitch) { this.serviceSwitch = serviceSwitch; } public Boolean getEntitySwitch() { return entitySwitch; } public void setEntitySwitch(Boolean entitySwitch) { this.entitySwitch = entitySwitch; } public Boolean getSqlSwitch() { return sqlSwitch; } public void setSqlSwitch(Boolean sqlSwitch) { this.sqlSwitch = sqlSwitch; } public String getParentMenuName() { return parentMenuName; } public void setParentMenuName(String parentMenuName) { this.parentMenuName = parentMenuName; } } DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/SimpleTemplateEngine.java
New file @@ -0,0 +1,70 @@ package com.stylefeng.guns.generator.engine; import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.generator.engine.base.GunsTemplateEngine; /** * 通用的模板生成引擎 * * @author fengshuonan * @date 2017-05-09 20:32 */ public class SimpleTemplateEngine extends GunsTemplateEngine { @Override protected void generatePageEditHtml() { String path = ToolUtil.format(super.getContextConfig().getProjectPath() + getPageConfig().getPageEditPathTemplate(), super.getContextConfig().getBizEnName(), super.getContextConfig().getBizEnName()); generateFile(super.getContextConfig().getTemplatePrefixPath() + "/page_edit.html.btl", path); System.out.println("生成编辑页面成功!"); } @Override protected void generatePageAddHtml() { String path = ToolUtil.format(super.getContextConfig().getProjectPath() + getPageConfig().getPageAddPathTemplate(), super.getContextConfig().getBizEnName(), super.getContextConfig().getBizEnName()); generateFile(super.getContextConfig().getTemplatePrefixPath() + "/page_add.html.btl", path); System.out.println("生成添加页面成功!"); } @Override protected void generatePageInfoJs() { String path = ToolUtil.format(super.getContextConfig().getProjectPath() + getPageConfig().getPageInfoJsPathTemplate(), super.getContextConfig().getBizEnName(), super.getContextConfig().getBizEnName()); generateFile(super.getContextConfig().getTemplatePrefixPath() + "/page_info.js.btl", path); System.out.println("生成页面详情js成功!"); } @Override protected void generatePageJs() { String path = ToolUtil.format(super.getContextConfig().getProjectPath() + getPageConfig().getPageJsPathTemplate(), super.getContextConfig().getBizEnName(), super.getContextConfig().getBizEnName()); generateFile(super.getContextConfig().getTemplatePrefixPath() + "/page.js.btl", path); System.out.println("生成页面js成功!"); } @Override protected void generatePageHtml() { String path = ToolUtil.format(super.getContextConfig().getProjectPath() + getPageConfig().getPagePathTemplate(), super.getContextConfig().getBizEnName(), super.getContextConfig().getBizEnName()); generateFile(super.getContextConfig().getTemplatePrefixPath() + "/page.html.btl", path); System.out.println("生成页面成功!"); } @Override protected void generateController() { String controllerPath = ToolUtil.format(super.getContextConfig().getProjectPath() + super.getControllerConfig().getControllerPathTemplate(), ToolUtil.firstLetterToUpper(super.getContextConfig().getBizEnName())); generateFile(super.getContextConfig().getTemplatePrefixPath() + "/Controller.java.btl", controllerPath); System.out.println("生成控制器成功!"); } @Override protected void generateSqls() { String path = ToolUtil.format(super.getContextConfig().getProjectPath() + super.sqlConfig.getSqlPathTemplate(), ToolUtil.firstLetterToUpper(super.getContextConfig().getBizEnName())); generateFile(super.getContextConfig().getTemplatePrefixPath() + "/menu_sql.sql.btl", path); System.out.println("生成sql成功!"); } } DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/base/AbstractTemplateEngine.java
New file @@ -0,0 +1,115 @@ package com.stylefeng.guns.generator.engine.base; import com.baomidou.mybatisplus.generator.config.po.TableInfo; import com.stylefeng.guns.generator.engine.config.*; /** * 模板生成父类 * * @author fengshuonan * @date 2017-05-08 20:17 */ public class AbstractTemplateEngine { protected ContextConfig contextConfig; //全局配置 protected ControllerConfig controllerConfig; //控制器的配置 protected PageConfig pageConfig; //页面的控制器 protected DaoConfig daoConfig; //Dao配置 protected ServiceConfig serviceConfig; //Service配置 protected SqlConfig sqlConfig; //sql配置 protected TableInfo tableInfo; //表的信息 public void initConfig() { if (this.contextConfig == null) { this.contextConfig = new ContextConfig(); } if (this.controllerConfig == null) { this.controllerConfig = new ControllerConfig(); } if (this.pageConfig == null) { this.pageConfig = new PageConfig(); } if (this.daoConfig == null) { this.daoConfig = new DaoConfig(); } if (this.serviceConfig == null) { this.serviceConfig = new ServiceConfig(); } if (this.sqlConfig == null) { this.sqlConfig = new SqlConfig(); } this.contextConfig.init(); this.controllerConfig.setContextConfig(this.contextConfig); this.controllerConfig.init(); this.serviceConfig.setContextConfig(this.contextConfig); this.serviceConfig.init(); this.daoConfig.setContextConfig(this.contextConfig); this.daoConfig.init(); this.pageConfig.setContextConfig(this.contextConfig); this.pageConfig.init(); this.sqlConfig.setContextConfig(this.contextConfig); this.sqlConfig.init(); } public PageConfig getPageConfig() { return pageConfig; } public void setPageConfig(PageConfig pageConfig) { this.pageConfig = pageConfig; } public ContextConfig getContextConfig() { return contextConfig; } public void setContextConfig(ContextConfig contextConfig) { this.contextConfig = contextConfig; } public ControllerConfig getControllerConfig() { return controllerConfig; } public void setControllerConfig(ControllerConfig controllerConfig) { this.controllerConfig = controllerConfig; } public DaoConfig getDaoConfig() { return daoConfig; } public void setDaoConfig(DaoConfig daoConfig) { this.daoConfig = daoConfig; } public ServiceConfig getServiceConfig() { return serviceConfig; } public void setServiceConfig(ServiceConfig serviceConfig) { this.serviceConfig = serviceConfig; } public SqlConfig getSqlConfig() { return sqlConfig; } public void setSqlConfig(SqlConfig sqlConfig) { this.sqlConfig = sqlConfig; } public TableInfo getTableInfo() { return tableInfo; } public void setTableInfo(TableInfo tableInfo) { this.tableInfo = tableInfo; } } DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/base/GunsTemplateEngine.java
New file @@ -0,0 +1,126 @@ package com.stylefeng.guns.generator.engine.base; import com.stylefeng.guns.core.util.ToolUtil; import com.sun.javafx.PlatformUtil; import org.beetl.core.Configuration; import org.beetl.core.GroupTemplate; import org.beetl.core.Template; import org.beetl.core.resource.ClasspathResourceLoader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Properties; /** * ADI项目模板生成 引擎 * * @author fengshuonan * @date 2017-05-07 22:15 */ public abstract class GunsTemplateEngine extends AbstractTemplateEngine { private GroupTemplate groupTemplate; public GunsTemplateEngine() { initBeetlEngine(); } protected void initBeetlEngine() { Properties properties = new Properties(); properties.put("RESOURCE.root", ""); properties.put("DELIMITER_STATEMENT_START", "<%"); properties.put("DELIMITER_STATEMENT_END", "%>"); properties.put("HTML_TAG_FLAG", "##"); Configuration cfg = null; try { cfg = new Configuration(properties); } catch (IOException e) { e.printStackTrace(); } ClasspathResourceLoader resourceLoader = new ClasspathResourceLoader(); groupTemplate = new GroupTemplate(resourceLoader, cfg); groupTemplate.registerFunctionPackage("tool", new ToolUtil()); } protected void configTemplate(Template template) { template.binding("controller", super.controllerConfig); template.binding("context", super.contextConfig); template.binding("dao", super.daoConfig); template.binding("service", super.serviceConfig); template.binding("sqls", super.sqlConfig); template.binding("table", super.tableInfo); } protected void generateFile(String template, String filePath) { Template pageTemplate = groupTemplate.getTemplate(template); configTemplate(pageTemplate); if (PlatformUtil.isWindows()) { filePath = filePath.replaceAll("/+|\\\\+", "\\\\"); } else { filePath = filePath.replaceAll("/+|\\\\+", "/"); } File file = new File(filePath); File parentFile = file.getParentFile(); if (!parentFile.exists()) { parentFile.mkdirs(); } FileOutputStream fileOutputStream = null; try { fileOutputStream = new FileOutputStream(file); pageTemplate.renderTo(fileOutputStream); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } public void start() { //配置之间的相互依赖 super.initConfig(); //生成模板 if (super.contextConfig.getControllerSwitch()) { generateController(); } if (super.contextConfig.getIndexPageSwitch()) { generatePageHtml(); } if (super.contextConfig.getAddPageSwitch()) { generatePageAddHtml(); } if (super.contextConfig.getEditPageSwitch()) { generatePageEditHtml(); } if (super.contextConfig.getJsSwitch()) { generatePageJs(); } if (super.contextConfig.getInfoJsSwitch()) { generatePageInfoJs(); } if (super.contextConfig.getSqlSwitch()) { generateSqls(); } } protected abstract void generatePageEditHtml(); protected abstract void generatePageAddHtml(); protected abstract void generatePageInfoJs(); protected abstract void generatePageJs(); protected abstract void generatePageHtml(); protected abstract void generateController(); protected abstract void generateSqls(); } DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/ContextConfig.java
New file @@ -0,0 +1,214 @@ package com.stylefeng.guns.generator.engine.config; import com.stylefeng.guns.core.util.ToolUtil; /** * 全局配置 * * @author fengshuonan * @date 2017-05-08 20:21 */ public class ContextConfig { private String templatePrefixPath = "gunsTemplate/advanced"; private String projectPath = "D:\\ideaSpace\\guns";//模板输出的项目目录 private String bizChName; //业务名称 private String bizEnName; //业务英文名称 private String bizEnBigName;//业务英文名称(大写) private String moduleName = "system"; //模块名称 private String proPackage = "com.stylefeng.guns.admin"; private String coreBasePackage = "com.stylefeng.guns.core"; private String modelPackageName = "com.stylefeng.guns.modular.system.model"; //model的包名 private String modelMapperPackageName = "com.stylefeng.guns.modular.system.dao"; //model的dao private String entityName; //实体的名称 private Boolean controllerSwitch = true; //是否生成控制器代码开关 private Boolean indexPageSwitch = true; //主页 private Boolean addPageSwitch = true; //添加页面 private Boolean editPageSwitch = true; //编辑页面 private Boolean jsSwitch = true; //js private Boolean infoJsSwitch = true; //详情页面js private Boolean daoSwitch = true; //dao private Boolean serviceSwitch = true; //service private Boolean entitySwitch = true; //生成实体的开关 private Boolean sqlSwitch = true; //生成sql的开关 public void init() { if (entityName == null) { entityName = bizEnBigName; } modelPackageName = proPackage + "." + "modular.system.model"; modelMapperPackageName = proPackage + "." + "modular.system.dao"; } public String getBizEnBigName() { return bizEnBigName; } public void setBizEnBigName(String bizEnBigName) { this.bizEnBigName = bizEnBigName; } public String getBizChName() { return bizChName; } public void setBizChName(String bizChName) { this.bizChName = bizChName; } public String getBizEnName() { return bizEnName; } public void setBizEnName(String bizEnName) { this.bizEnName = bizEnName; this.bizEnBigName = ToolUtil.firstLetterToUpper(this.bizEnName); } public String getProjectPath() { return projectPath; } public void setProjectPath(String projectPath) { this.projectPath = projectPath; } public String getModuleName() { return moduleName; } public void setModuleName(String moduleName) { this.moduleName = moduleName; } public Boolean getControllerSwitch() { return controllerSwitch; } public void setControllerSwitch(Boolean controllerSwitch) { this.controllerSwitch = controllerSwitch; } public Boolean getIndexPageSwitch() { return indexPageSwitch; } public void setIndexPageSwitch(Boolean indexPageSwitch) { this.indexPageSwitch = indexPageSwitch; } public Boolean getAddPageSwitch() { return addPageSwitch; } public void setAddPageSwitch(Boolean addPageSwitch) { this.addPageSwitch = addPageSwitch; } public Boolean getEditPageSwitch() { return editPageSwitch; } public void setEditPageSwitch(Boolean editPageSwitch) { this.editPageSwitch = editPageSwitch; } public Boolean getJsSwitch() { return jsSwitch; } public void setJsSwitch(Boolean jsSwitch) { this.jsSwitch = jsSwitch; } public Boolean getInfoJsSwitch() { return infoJsSwitch; } public void setInfoJsSwitch(Boolean infoJsSwitch) { this.infoJsSwitch = infoJsSwitch; } public Boolean getDaoSwitch() { return daoSwitch; } public void setDaoSwitch(Boolean daoSwitch) { this.daoSwitch = daoSwitch; } public Boolean getServiceSwitch() { return serviceSwitch; } public void setServiceSwitch(Boolean serviceSwitch) { this.serviceSwitch = serviceSwitch; } public String getTemplatePrefixPath() { return templatePrefixPath; } public void setTemplatePrefixPath(String templatePrefixPath) { this.templatePrefixPath = templatePrefixPath; } public String getModelPackageName() { return modelPackageName; } public void setModelPackageName(String modelPackageName) { this.modelPackageName = modelPackageName; } public String getEntityName() { return entityName; } public void setEntityName(String entityName) { this.entityName = entityName; } public String getModelMapperPackageName() { return modelMapperPackageName; } public void setModelMapperPackageName(String modelMapperPackageName) { this.modelMapperPackageName = modelMapperPackageName; } public Boolean getEntitySwitch() { return entitySwitch; } public void setEntitySwitch(Boolean entitySwitch) { this.entitySwitch = entitySwitch; } public Boolean getSqlSwitch() { return sqlSwitch; } public void setSqlSwitch(Boolean sqlSwitch) { this.sqlSwitch = sqlSwitch; } public String getProPackage() { return proPackage; } public void setProPackage(String proPackage) { this.proPackage = proPackage; } public String getCoreBasePackage() { return coreBasePackage; } public void setCoreBasePackage(String coreBasePackage) { this.coreBasePackage = coreBasePackage; } } DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/ControllerConfig.java
New file @@ -0,0 +1,70 @@ package com.stylefeng.guns.generator.engine.config; import java.util.ArrayList; import java.util.List; /** * 控制器模板生成的配置 * * @author fengshuonan * @date 2017-05-07 22:12 */ public class ControllerConfig { private ContextConfig contextConfig; private String controllerPathTemplate; private String packageName;//包名称 private List<String> imports;//所引入的包 public void init() { ArrayList<String> imports = new ArrayList<>(); imports.add(contextConfig.getCoreBasePackage() + ".base.controller.BaseController"); imports.add("org.springframework.stereotype.Controller"); imports.add("org.springframework.web.bind.annotation.RequestMapping"); imports.add("org.springframework.web.bind.annotation.ResponseBody"); imports.add("org.springframework.ui.Model"); imports.add("org.springframework.web.bind.annotation.PathVariable"); imports.add("org.springframework.beans.factory.annotation.Autowired"); imports.add(contextConfig.getProPackage() + ".core.log.LogObjectHolder"); imports.add("org.springframework.web.bind.annotation.RequestParam"); imports.add(contextConfig.getModelPackageName() + "." + contextConfig.getEntityName()); imports.add(contextConfig.getProPackage() + ".modular." + contextConfig.getModuleName() + ".service" + ".I" + contextConfig.getEntityName() + "Service"); this.imports = imports; this.packageName = contextConfig.getProPackage() + ".modular." + contextConfig.getModuleName() + ".controller"; this.controllerPathTemplate = "\\src\\main\\java\\"+contextConfig.getProPackage().replaceAll("\\.","\\\\")+"\\modular\\" + contextConfig.getModuleName() + "\\controller\\{}Controller.java"; } public String getPackageName() { return packageName; } public void setPackageName(String packageName) { this.packageName = packageName; } public List<String> getImports() { return imports; } public void setImports(List<String> imports) { this.imports = imports; } public String getControllerPathTemplate() { return controllerPathTemplate; } public void setControllerPathTemplate(String controllerPathTemplate) { this.controllerPathTemplate = controllerPathTemplate; } public ContextConfig getContextConfig() { return contextConfig; } public void setContextConfig(ContextConfig contextConfig) { this.contextConfig = contextConfig; } } DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/DaoConfig.java
New file @@ -0,0 +1,55 @@ package com.stylefeng.guns.generator.engine.config; /** * Dao模板生成的配置 * * @author fengshuonan * @date 2017-05-07 22:12 */ public class DaoConfig { private ContextConfig contextConfig; private String daoPathTemplate; private String xmlPathTemplate; private String packageName; public void init() { this.daoPathTemplate = "\\src\\main\\java\\" + contextConfig.getProPackage().replaceAll("\\.", "\\\\") + "\\modular\\" + contextConfig.getModuleName() + "\\dao\\{}Dao.java"; this.xmlPathTemplate = "\\src\\main\\java\\" + contextConfig.getProPackage().replaceAll("\\.", "\\\\") + "\\modular\\" + contextConfig.getModuleName() + "\\dao\\mapping\\{}Dao.xml"; this.packageName = contextConfig.getProPackage() + ".modular." + contextConfig.getModuleName() + ".dao"; } public String getPackageName() { return packageName; } public void setPackageName(String packageName) { this.packageName = packageName; } public String getDaoPathTemplate() { return daoPathTemplate; } public void setDaoPathTemplate(String daoPathTemplate) { this.daoPathTemplate = daoPathTemplate; } public String getXmlPathTemplate() { return xmlPathTemplate; } public void setXmlPathTemplate(String xmlPathTemplate) { this.xmlPathTemplate = xmlPathTemplate; } public ContextConfig getContextConfig() { return contextConfig; } public void setContextConfig(ContextConfig contextConfig) { this.contextConfig = contextConfig; } } DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/Menu.java
New file @@ -0,0 +1,203 @@ package com.stylefeng.guns.generator.engine.config; import com.baomidou.mybatisplus.activerecord.Model; import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.enums.IdType; import java.io.Serializable; /** * <p> * 菜单表 * </p> * * @author stylefeng * @since 2017-07-11 */ public class Menu extends Model<Menu> { private static final long serialVersionUID = 1L; /** * 主键id */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 菜单编号 */ private String code; /** * 菜单父编号 */ private String pcode; /** * 当前菜单的所有父菜单编号 */ private String pcodes; /** * 菜单名称 */ private String name; /** * 菜单图标 */ private String icon; /** * url地址 */ private String url; /** * 菜单排序号 */ private Integer num; /** * 菜单层级 */ private Integer levels; /** * 是否是菜单(1:是 0:不是) */ private Integer ismenu; /** * 备注 */ private String tips; /** * 菜单状态 : 1:启用 0:不启用 */ private Integer status; /** * 是否打开: 1:打开 0:不打开 */ private Integer isopen; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getPcode() { return pcode; } public void setPcode(String pcode) { this.pcode = pcode; } public String getPcodes() { return pcodes; } public void setPcodes(String pcodes) { this.pcodes = pcodes; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public Integer getNum() { return num; } public void setNum(Integer num) { this.num = num; } public Integer getLevels() { return levels; } public void setLevels(Integer levels) { this.levels = levels; } public Integer getIsmenu() { return ismenu; } public void setIsmenu(Integer ismenu) { this.ismenu = ismenu; } public String getTips() { return tips; } public void setTips(String tips) { this.tips = tips; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public Integer getIsopen() { return isopen; } public void setIsopen(Integer isopen) { this.isopen = isopen; } @Override protected Serializable pkVal() { return this.id; } @Override public String toString() { return "Menu{" + "id=" + id + ", code=" + code + ", pcode=" + pcode + ", pcodes=" + pcodes + ", name=" + name + ", icon=" + icon + ", url=" + url + ", num=" + num + ", levels=" + levels + ", ismenu=" + ismenu + ", tips=" + tips + ", status=" + status + ", isopen=" + isopen + "}"; } } DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/PageConfig.java
New file @@ -0,0 +1,74 @@ package com.stylefeng.guns.generator.engine.config; /** * 页面 模板生成的配置 * * @author fengshuonan * @date 2017-05-07 22:12 */ public class PageConfig { private ContextConfig contextConfig; private String pagePathTemplate; private String pageAddPathTemplate; private String pageEditPathTemplate; private String pageJsPathTemplate; private String pageInfoJsPathTemplate; public void init() { pagePathTemplate = "\\src\\main\\webapp\\WEB-INF\\view\\" + contextConfig.getModuleName() + "\\{}\\{}.html"; pageAddPathTemplate = "\\src\\main\\webapp\\WEB-INF\\view\\" + contextConfig.getModuleName() + "\\{}\\{}_add.html"; pageEditPathTemplate = "\\src\\main\\webapp\\WEB-INF\\view\\" + contextConfig.getModuleName() + "\\{}\\{}_edit.html"; pageJsPathTemplate = "\\src\\main\\webapp\\static\\modular\\" + contextConfig.getModuleName() + "\\{}\\{}.js"; pageInfoJsPathTemplate = "\\src\\main\\webapp\\static\\modular\\" + contextConfig.getModuleName() + "\\{}\\{}_info.js"; } public String getPagePathTemplate() { return pagePathTemplate; } public void setPagePathTemplate(String pagePathTemplate) { this.pagePathTemplate = pagePathTemplate; } public String getPageJsPathTemplate() { return pageJsPathTemplate; } public void setPageJsPathTemplate(String pageJsPathTemplate) { this.pageJsPathTemplate = pageJsPathTemplate; } public String getPageAddPathTemplate() { return pageAddPathTemplate; } public void setPageAddPathTemplate(String pageAddPathTemplate) { this.pageAddPathTemplate = pageAddPathTemplate; } public String getPageEditPathTemplate() { return pageEditPathTemplate; } public void setPageEditPathTemplate(String pageEditPathTemplate) { this.pageEditPathTemplate = pageEditPathTemplate; } public String getPageInfoJsPathTemplate() { return pageInfoJsPathTemplate; } public void setPageInfoJsPathTemplate(String pageInfoJsPathTemplate) { this.pageInfoJsPathTemplate = pageInfoJsPathTemplate; } public ContextConfig getContextConfig() { return contextConfig; } public void setContextConfig(ContextConfig contextConfig) { this.contextConfig = contextConfig; } } DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/ServiceConfig.java
New file @@ -0,0 +1,91 @@ package com.stylefeng.guns.generator.engine.config; import java.util.ArrayList; import java.util.List; /** * Service模板生成的配置 * * @author fengshuonan * @date 2017-05-07 22:12 */ public class ServiceConfig { private ContextConfig contextConfig; private String servicePathTemplate; private String serviceImplPathTemplate; private String packageName; private List<String> serviceInterfaceImports; private List<String> serviceImplImports; public void init() { ArrayList<String> imports = new ArrayList<>(); imports.add("org.springframework.stereotype.Service"); imports.add("com.baomidou.mybatisplus.service.impl.ServiceImpl"); imports.add(contextConfig.getModelPackageName() + "." + contextConfig.getEntityName()); imports.add(contextConfig.getModelMapperPackageName() + "." + contextConfig.getEntityName() + "Mapper"); imports.add(contextConfig.getProPackage() + ".modular." + contextConfig.getModuleName() + ".service.I" + contextConfig.getBizEnBigName() + "Service"); this.serviceImplImports = imports; ArrayList<String> interfaceImports = new ArrayList<>(); interfaceImports.add("com.baomidou.mybatisplus.service.IService"); interfaceImports.add(contextConfig.getModelPackageName() + "." + contextConfig.getEntityName()); this.serviceInterfaceImports = interfaceImports; this.servicePathTemplate = "\\src\\main\\java\\" + contextConfig.getProPackage().replaceAll("\\.", "\\\\") + "\\modular\\" + contextConfig.getModuleName() + "\\service\\I{}Service.java"; this.serviceImplPathTemplate = "\\src\\main\\java\\" + contextConfig.getProPackage().replaceAll("\\.", "\\\\") + "\\modular\\" + contextConfig.getModuleName() + "\\service\\impl\\{}ServiceImpl.java"; this.packageName = contextConfig.getProPackage() + ".modular." + contextConfig.getModuleName() + ".service"; } public String getServicePathTemplate() { return servicePathTemplate; } public void setServicePathTemplate(String servicePathTemplate) { this.servicePathTemplate = servicePathTemplate; } public String getPackageName() { return packageName; } public void setPackageName(String packageName) { this.packageName = packageName; } public String getServiceImplPathTemplate() { return serviceImplPathTemplate; } public void setServiceImplPathTemplate(String serviceImplPathTemplate) { this.serviceImplPathTemplate = serviceImplPathTemplate; } public List<String> getServiceImplImports() { return serviceImplImports; } public void setServiceImplImports(List<String> serviceImplImports) { this.serviceImplImports = serviceImplImports; } public ContextConfig getContextConfig() { return contextConfig; } public void setContextConfig(ContextConfig contextConfig) { this.contextConfig = contextConfig; } public List<String> getServiceInterfaceImports() { return serviceInterfaceImports; } public void setServiceInterfaceImports(List<String> serviceInterfaceImports) { this.serviceInterfaceImports = serviceInterfaceImports; } } DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/SqlConfig.java
New file @@ -0,0 +1,194 @@ package com.stylefeng.guns.generator.engine.config; import com.baomidou.mybatisplus.toolkit.IdWorker; import com.stylefeng.guns.core.constant.IsMenu; import com.stylefeng.guns.core.util.ToolUtil; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; /** * 全局配置 * * @author fengshuonan * @date 2017-05-08 20:21 */ public class SqlConfig { private String sqlPathTemplate; private ContextConfig contextConfig; private Connection connection; private String parentMenuName; private List<Menu> menus = new ArrayList<>(6); public void init() { this.sqlPathTemplate = "\\src\\main\\java\\{}.sql"; if (parentMenuName == null) { return; } //根据父菜单查询数据库中的pcode和pcodes String[] pcodeAndPcodes = getPcodeAndPcodes(); if (pcodeAndPcodes == null) { System.err.println("父级菜单名称输入有误!!!!"); return; } //业务菜单 Menu menu = new Menu(); menu.setId(IdWorker.getId()); menu.setCode(contextConfig.getBizEnName()); menu.setPcode(pcodeAndPcodes[0]); menu.setPcodes(pcodeAndPcodes[1] + "[" + pcodeAndPcodes[0] + "],"); menu.setName(contextConfig.getBizChName()); menu.setIcon(""); menu.setUrl("/" + contextConfig.getBizEnName()); menu.setNum(99); if (parentMenuName.equals("顶级")) { menu.setLevels(1); } else { menu.setLevels(2); } menu.setIsmenu(IsMenu.YES.getCode()); menu.setStatus(1); menu.setIsopen(0); menus.add(menu); //列表 Menu list = createSubMenu(menu); list.setCode(contextConfig.getBizEnName() + "_list"); list.setName(contextConfig.getBizChName() + "列表"); list.setUrl("/" + contextConfig.getBizEnName() + "/list"); menus.add(list); //添加 Menu add = createSubMenu(menu); add.setCode(contextConfig.getBizEnName() + "_add"); add.setName(contextConfig.getBizChName() + "添加"); add.setUrl("/" + contextConfig.getBizEnName() + "/add"); menus.add(add); //更新 Menu update = createSubMenu(menu); update.setCode(contextConfig.getBizEnName() + "_update"); update.setName(contextConfig.getBizChName() + "更新"); update.setUrl("/" + contextConfig.getBizEnName() + "/update"); menus.add(update); //删除 Menu delete = createSubMenu(menu); delete.setCode(contextConfig.getBizEnName() + "_delete"); delete.setName(contextConfig.getBizChName() + "删除"); delete.setUrl("/" + contextConfig.getBizEnName() + "/delete"); menus.add(delete); //详情 Menu detail = createSubMenu(menu); detail.setCode(contextConfig.getBizEnName() + "_detail"); detail.setName(contextConfig.getBizChName() + "详情"); detail.setUrl("/" + contextConfig.getBizEnName() + "/detail"); menus.add(detail); } private Menu createSubMenu(Menu parentMenu) { Menu menu = new Menu(); menu.setId(IdWorker.getId()); menu.setPcode(parentMenu.getCode()); menu.setPcodes(parentMenu.getPcodes() + "[" + parentMenu.getCode() + "],"); menu.setIcon(""); menu.setNum(99); menu.setLevels(parentMenu.getLevels() + 1); menu.setIsmenu(IsMenu.NO.getCode()); menu.setStatus(1); menu.setIsopen(0); return menu; } public String[] getPcodeAndPcodes() { if (parentMenuName.equals("顶级")) { return new String[]{"0", ""}; } PreparedStatement preparedStatement = null; try { preparedStatement = connection.prepareStatement("select * from sys_menu where name like ?"); preparedStatement.setString(1, "%" + parentMenuName + "%"); ResultSet results = preparedStatement.executeQuery(); while (results.next()) { String pcode = results.getString("code"); String pcodes = results.getString("pcodes"); if (ToolUtil.isNotEmpty(pcode) && ToolUtil.isNotEmpty(pcodes)) { String[] strings = {pcode, pcodes}; return strings; } else { return null; } } } catch (SQLException e) { e.printStackTrace(); } finally { // 释放资源 try { if (preparedStatement != null) { preparedStatement.close(); } if (connection != null) { connection.close(); } } catch (SQLException e) { e.printStackTrace(); } } return null; } public ContextConfig getContextConfig() { return contextConfig; } public void setContextConfig(ContextConfig contextConfig) { this.contextConfig = contextConfig; } public String getParentMenuName() { return parentMenuName; } public void setParentMenuName(String parentMenuName) { this.parentMenuName = parentMenuName; } public Connection getConnection() { return connection; } public void setConnection(Connection connection) { this.connection = connection; } public String getSqlPathTemplate() { return sqlPathTemplate; } public void setSqlPathTemplate(String sqlPathTemplate) { this.sqlPathTemplate = sqlPathTemplate; } public List<Menu> getMenus() { return menus; } public void setMenus(List<Menu> menus) { this.menus = menus; } }