From 298123287169c27fd8bfe7b6226cfc5cf5ae93c8 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 12 六月 2025 23:54:56 +0800
Subject: [PATCH] 更新司机端中台接口

---
 DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/ContextConfig.java           |  214 ++++++
 DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/base/AbstractTemplateEngine.java    |  115 +++
 DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/Menu.java                    |  203 ++++++
 DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/SimpleTemplateEngine.java           |   70 ++
 DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/ControllerConfig.java        |   70 ++
 DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/config/GunsGeneratorConfig.java     |   81 ++
 DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/ServiceConfig.java           |   91 ++
 DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/config/WebGeneratorConfig.java      |   97 +++
 DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/base/GunsTemplateEngine.java        |  126 ++++
 DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/config/AbstractGeneratorConfig.java |  109 +++
 DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/model/GenQo.java                    |  297 +++++++++
 DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/DaoConfig.java               |   55 +
 DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/PageConfig.java              |   74 ++
 DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/SqlConfig.java               |  194 ++++++
 DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/GunsCodeGenerator.java              |   30 
 15 files changed, 1,826 insertions(+), 0 deletions(-)

diff --git a/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/GunsCodeGenerator.java b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/GunsCodeGenerator.java
new file mode 100644
index 0000000..bcd169b
--- /dev/null
+++ b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/GunsCodeGenerator.java
@@ -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();
+    }
+
+}
\ No newline at end of file
diff --git a/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/config/AbstractGeneratorConfig.java b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/config/AbstractGeneratorConfig.java
new file mode 100644
index 0000000..e50b78a
--- /dev/null
+++ b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/config/AbstractGeneratorConfig.java
@@ -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();
+    }
+}
diff --git a/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/config/GunsGeneratorConfig.java b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/config/GunsGeneratorConfig.java
new file mode 100644
index 0000000..43012ab
--- /dev/null
+++ b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/config/GunsGeneratorConfig.java
@@ -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();
+    }
+}
diff --git a/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/config/WebGeneratorConfig.java b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/config/WebGeneratorConfig.java
new file mode 100644
index 0000000..6b821f5
--- /dev/null
+++ b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/config/WebGeneratorConfig.java
@@ -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());
+    }
+}
diff --git a/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/model/GenQo.java b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/model/GenQo.java
new file mode 100644
index 0000000..b09d948
--- /dev/null
+++ b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/action/model/GenQo.java
@@ -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;
+    }
+}
diff --git a/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/SimpleTemplateEngine.java b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/SimpleTemplateEngine.java
new file mode 100644
index 0000000..9e057c7
--- /dev/null
+++ b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/SimpleTemplateEngine.java
@@ -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成功!");
+    }
+}
diff --git a/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/base/AbstractTemplateEngine.java b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/base/AbstractTemplateEngine.java
new file mode 100644
index 0000000..ef2512e
--- /dev/null
+++ b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/base/AbstractTemplateEngine.java
@@ -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;
+    }
+}
+
diff --git a/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/base/GunsTemplateEngine.java b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/base/GunsTemplateEngine.java
new file mode 100644
index 0000000..4d3ab84
--- /dev/null
+++ b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/base/GunsTemplateEngine.java
@@ -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();
+
+}
diff --git a/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/ContextConfig.java b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/ContextConfig.java
new file mode 100644
index 0000000..d8403d8
--- /dev/null
+++ b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/ContextConfig.java
@@ -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;
+    }
+}
diff --git a/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/ControllerConfig.java b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/ControllerConfig.java
new file mode 100644
index 0000000..8775b3c
--- /dev/null
+++ b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/ControllerConfig.java
@@ -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;
+    }
+
+}
diff --git a/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/DaoConfig.java b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/DaoConfig.java
new file mode 100644
index 0000000..00e3092
--- /dev/null
+++ b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/DaoConfig.java
@@ -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;
+    }
+}
diff --git a/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/Menu.java b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/Menu.java
new file mode 100644
index 0000000..2770128
--- /dev/null
+++ b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/Menu.java
@@ -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 +
+                "}";
+    }
+}
diff --git a/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/PageConfig.java b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/PageConfig.java
new file mode 100644
index 0000000..a3324ea
--- /dev/null
+++ b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/PageConfig.java
@@ -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;
+    }
+}
diff --git a/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/ServiceConfig.java b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/ServiceConfig.java
new file mode 100644
index 0000000..e6cc865
--- /dev/null
+++ b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/ServiceConfig.java
@@ -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;
+    }
+}
diff --git a/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/SqlConfig.java b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/SqlConfig.java
new file mode 100644
index 0000000..ec64b55
--- /dev/null
+++ b/DriverQYTTravel/guns-generator/src/main/java/com/stylefeng/guns/generator/engine/config/SqlConfig.java
@@ -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;
+    }
+}

--
Gitblit v1.7.1