From e166127c9f590dbde8d15d63b468521ba48244a8 Mon Sep 17 00:00:00 2001
From: RuoYi <yzz_ivy@163.com>
Date: Sun, 7 Oct 2018 14:16:47 +0800
Subject: [PATCH] =?UTF-8?q?=E8=8B=A5=E4=BE=9D=203.0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 README.md                                     |    4 +-
 pom.xml                                       |  293 +-
 ruoyi-admin/pom.xml                           |  115 +
 .../main/java/com/ruoyi/RuoYiApplication.java |    2 +-
 .../com/ruoyi/RuoYiServletInitializer.java    |    0
 .../controller}/common/CommonController.java  |    6 +-
 .../controller/monitor}/DruidController.java  |    4 +-
 .../controller/monitor}/JobController.java    |   40 +-
 .../controller/monitor}/JobLogController.java |   28 +-
 .../monitor}/LogininforController.java        |   28 +-
 .../monitor}/OperlogController.java           |   28 +-
 .../monitor}/UserOnlineController.java        |   37 +-
 .../controller/system}/CaptchaController.java |    4 +-
 .../controller/system}/ConfigController.java  |   37 +-
 .../controller/system}/DeptController.java    |   35 +-
 .../system}/DictDataController.java           |   35 +-
 .../system}/DictTypeController.java           |   37 +-
 .../controller/system}/IndexController.java   |   25 +-
 .../controller/system}/LoginController.java   |    8 +-
 .../controller/system}/MenuController.java    |   42 +-
 .../controller/system}/NoticeController.java  |   27 +-
 .../controller/system}/PostController.java    |   39 +-
 .../controller/system}/ProfileController.java |   38 +-
 .../controller/system}/RoleController.java    |   44 +-
 .../controller/system}/UserController.java    |   63 +-
 .../web/controller/tool}/BuildController.java |    4 +-
 .../web/controller/tool}/GenController.java   |   12 +-
 .../controller/tool}/SwaggerController.java   |    4 +-
 .../web/controller/tool}/TestController.java  |    9 +-
 .../ruoyi/web/core/base}/BaseController.java  |   12 +-
 .../ruoyi/web/core}/config/SwaggerConfig.java |   12 +-
 .../src}/main/resources/application-druid.yml |    0
 .../src}/main/resources/application.yml       |    8 +-
 .../src}/main/resources/banner.txt            |    0
 .../main/resources/ehcache/ehcache-shiro.xml  |    0
 .../main/resources/i18n/messages.properties   |    0
 .../src}/main/resources/logback.xml           |    0
 .../ajax/libs/beautifyhtml/beautifyhtml.js    |    0
 .../ajax/libs/blockUI/jquery.blockUI.js       |    0
 .../bootstrap-table/bootstrap-table.min.css   |    0
 .../bootstrap-table/bootstrap-table.min.js    |    0
 .../editable/bootstrap-table-editable.js      |    0
 .../editable/bootstrap-table-editable.min.js  |    0
 .../export/bootstrap-table-export.js          |    0
 .../extensions/export/tableExport.js          |    0
 .../mobile/bootstrap-table-mobile.js          |    0
 .../mobile/bootstrap-table-mobile.min.js      |    0
 .../toolbar/bootstrap-table-toolbar.js        |    0
 .../toolbar/bootstrap-table-toolbar.min.js    |    0
 .../locale/bootstrap-table-zh-CN.js           |    0
 .../locale/bootstrap-table-zh-CN.min.js       |    0
 .../bootstrap-treetable.css                   |   28 +-
 .../bootstrap-treetable.js                    | 1338 ++---
 .../static/ajax/libs/cropbox/cropbox.css      |    0
 .../static/ajax/libs/cropbox/cropbox.js       |    0
 .../libs/datapicker/bootstrap-datepicker.js   |    0
 .../ajax/libs/datapicker/datepicker3.css      |    0
 .../ajax/libs/fullscreen/jquery.fullscreen.js |    0
 .../static/ajax/libs/iCheck/custom.css        |    0
 .../static/ajax/libs/iCheck/green-login.png   |  Bin
 .../static/ajax/libs/iCheck/green.png         |  Bin
 .../static/ajax/libs/iCheck/green@2x.png      |  Bin
 .../static/ajax/libs/iCheck/icheck.min.js     |    0
 .../jquery-layout/jquery.layout-latest.css    |    0
 .../jquery-layout/jquery.layout-latest.js     |    0
 .../3.5/css/default/img/diy/1_close.png       |  Bin
 .../3.5/css/default/img/diy/1_open.png        |  Bin
 .../3.5/css/default/img/diy/2.png             |  Bin
 .../3.5/css/default/img/diy/3.png             |  Bin
 .../3.5/css/default/img/diy/4.png             |  Bin
 .../3.5/css/default/img/diy/5.png             |  Bin
 .../3.5/css/default/img/diy/6.png             |  Bin
 .../3.5/css/default/img/diy/7.png             |  Bin
 .../3.5/css/default/img/diy/8.png             |  Bin
 .../3.5/css/default/img/diy/9.png             |  Bin
 .../3.5/css/default/img/line_conn.gif         |  Bin
 .../3.5/css/default/img/loading.gif           |  Bin
 .../3.5/css/default/img/zTreeStandard.gif     |  Bin
 .../3.5/css/default/img/zTreeStandard.png     |  Bin
 .../3.5/css/default/zTreeStyle.css            |    0
 .../3.5/css/metro/img/line_conn.gif           |  Bin
 .../3.5/css/metro/img/line_conn.png           |  Bin
 .../3.5/css/metro/img/loading.gif             |  Bin
 .../jquery-ztree/3.5/css/metro/img/metro.gif  |  Bin
 .../jquery-ztree/3.5/css/metro/img/metro.png  |  Bin
 .../jquery-ztree/3.5/css/metro/zTreeStyle.css |    0
 .../3.5/css/simple/img/left_menu.gif          |  Bin
 .../3.5/css/simple/img/left_menu.png          |  Bin
 .../3.5/css/simple/img/line_conn.gif          |  Bin
 .../3.5/css/simple/img/loading.gif            |  Bin
 .../3.5/css/simple/img/zTreeStandard.gif      |  Bin
 .../3.5/css/simple/img/zTreeStandard.png      |  Bin
 .../3.5/css/simple/zTreeStyle.css             |    0
 .../3.5/js/jquery.ztree.all-3.5.js            |    0
 .../3.5/js/jquery.ztree.core-3.5.js           |    0
 .../3.5/js/jquery.ztree.excheck-3.5.js        |    0
 .../3.5/js/jquery.ztree.exedit-3.5.js         |    0
 .../3.5/js/jquery.ztree.exhide-3.5.js         |    0
 .../ajax/libs/jquery-ztree/3.5/log v3.x.txt   |    0
 .../static/ajax/libs/layer/layer.min.js       |    0
 .../libs/layer/theme/default/icon-ext.png     |  Bin
 .../ajax/libs/layer/theme/default/icon.png    |  Bin
 .../ajax/libs/layer/theme/default/layer.css   |    0
 .../libs/layer/theme/default/loading-0.gif    |  Bin
 .../libs/layer/theme/default/loading-1.gif    |  Bin
 .../libs/layer/theme/default/loading-2.gif    |  Bin
 .../modules/laydate/default/font/iconfont.eot |  Bin
 .../modules/laydate/default/font/iconfont.svg |   90 +-
 .../modules/laydate/default/font/iconfont.ttf |  Bin
 .../laydate/default/font/iconfont.woff        |  Bin
 .../css/modules/laydate/default/laydate.css   |    2 +-
 .../ajax/libs/layui/lay/modules/laydate.js    |    4 +-
 .../ajax/libs/layui/lay/modules/layer.js      |    2 +-
 .../resources/static/ajax/libs/layui/layui.js |    2 +-
 .../static/ajax/libs/select/select2.css       |    0
 .../static/ajax/libs/select/select2.js        |    0
 .../ajax/libs/summernote/font/summernote.woff |  Bin
 .../ajax/libs/summernote/summernote-0.8.8.css |    0
 .../ajax/libs/summernote/summernote-bs3.css   |    0
 .../ajax/libs/summernote/summernote-zh-CN.js  |    0
 .../libs/summernote/summernote-zh-CN.min.js   |    0
 .../ajax/libs/summernote/summernote.css       |    0
 .../static/ajax/libs/summernote/summernote.js |    0
 .../ajax/libs/summernote/summernote.min.js    |    0
 .../libs/validate/additional-methods.min.js   |    0
 .../libs/validate/jquery.validate.extend.js   |    0
 .../ajax/libs/validate/jquery.validate.min.js |    0
 .../ajax/libs/validate/messages_zh.min.js     |    0
 .../main/resources/static/css/animate.css     |    0
 .../resources/static/css/bootstrap.min.css    |    0
 .../resources/static/css/font-awesome.min.css |    0
 .../src}/main/resources/static/css/login.css  |    0
 .../main/resources/static/css/login.min.css   |    0
 .../resources/static/css/main/animate.min.css |    0
 .../static/css/main/bootstrap.min14ed.css     |    0
 .../static/css/main/font-awesome.min93e3.css  |    0
 .../static/css/main/style.min862f.css         |    0
 .../css/patterns/header-profile-skin-blue.png |  Bin
 .../patterns/header-profile-skin-yellow.png   |  Bin
 .../static/css/patterns/header-profile.png    |  Bin
 .../static/css/patterns/shattered.png         |  Bin
 .../src}/main/resources/static/css/style.css  |    0
 .../src}/main/resources/static/favicon.ico    |  Bin
 .../src}/main/resources/static/file/rml.txt   |    0
 .../resources/static/fonts/FontAwesome.otf    |  Bin
 .../static/fonts/Simple-Line-Icons.woff2      |  Bin
 .../static/fonts/fontawesome-webfont.eot      |  Bin
 .../static/fonts/fontawesome-webfont.svg      |    0
 .../static/fonts/fontawesome-webfont.ttf      |  Bin
 .../static/fonts/fontawesome-webfont.woff     |  Bin
 .../static/fonts/fontawesome-webfont.woff2    |  Bin
 .../fonts/glyphicons-halflings-regular.eot    |  Bin
 .../fonts/glyphicons-halflings-regular.svg    |    0
 .../fonts/glyphicons-halflings-regular.ttf    |  Bin
 .../fonts/glyphicons-halflings-regular.woff   |  Bin
 .../fonts/glyphicons-halflings-regular.woff2  |  Bin
 .../src}/main/resources/static/img/blue.png   |  Bin
 .../resources/static/img/loading-upload.gif   |  Bin
 .../main/resources/static/img/loading.gif     |  Bin
 .../src}/main/resources/static/img/locked.png |  Bin
 .../resources/static/img/login-background.jpg |  Bin
 .../src}/main/resources/static/img/pay.png    |  Bin
 .../main/resources/static/img/profile.jpg     |  Bin
 .../main/resources/static/img/progress.png    |  Bin
 .../main/resources/static/img/qr_code.png     |  Bin
 .../src}/main/resources/static/img/user.png   |  Bin
 .../main/resources/static/js/bootstrap.min.js |    0
 .../static/js/jquery-ui-1.10.4.min.js         |    0
 .../main/resources/static/js/jquery.min.js    |    0
 .../js/plugins/metisMenu/jquery.metisMenu.js  |    0
 .../slimscroll/jquery.slimscroll.min.js       |    0
 .../src}/main/resources/static/ruoyi.png      |  Bin
 .../main/resources/static/ruoyi/css/ry-ui.css |    0
 .../src}/main/resources/static/ruoyi/index.js |    0
 .../main/resources/static/ruoyi/js/common.js  |    0
 .../main/resources/static/ruoyi/js/ry-ui.js   |    0
 .../src}/main/resources/static/ruoyi/login.js |    0
 .../main/resources/templates/error/404.html   |    0
 .../main/resources/templates/error/500.html   |    0
 .../resources/templates/error/unauth.html     |    0
 .../main/resources/templates/include.html     |    0
 .../src}/main/resources/templates/index.html  |    0
 .../src}/main/resources/templates/login.html  |    0
 .../src}/main/resources/templates/main.html   |    4 +-
 .../resources/templates/monitor/job/add.html  |    0
 .../resources/templates/monitor/job/edit.html |    0
 .../resources/templates/monitor/job/job.html  |    0
 .../templates/monitor/job/jobLog.html         |    0
 .../monitor/logininfor/logininfor.html        |    0
 .../templates/monitor/online/online.html      |    0
 .../templates/monitor/operlog/detail.html     |    0
 .../templates/monitor/operlog/operlog.html    |    0
 .../templates/system/config/add.html          |    0
 .../templates/system/config/config.html       |    0
 .../templates/system/config/edit.html         |    0
 .../resources/templates/system/dept/add.html  |    0
 .../resources/templates/system/dept/dept.html |    0
 .../resources/templates/system/dept/edit.html |    0
 .../resources/templates/system/dept/tree.html |    0
 .../templates/system/dict/data/add.html       |    0
 .../templates/system/dict/data/data.html      |    0
 .../templates/system/dict/data/edit.html      |    0
 .../templates/system/dict/type/add.html       |    0
 .../templates/system/dict/type/edit.html      |    0
 .../templates/system/dict/type/type.html      |    0
 .../resources/templates/system/menu/add.html  |    0
 .../resources/templates/system/menu/edit.html |    0
 .../resources/templates/system/menu/icon.html |    0
 .../resources/templates/system/menu/menu.html |    0
 .../resources/templates/system/menu/tree.html |    0
 .../templates/system/notice/add.html          |    0
 .../templates/system/notice/edit.html         |    0
 .../templates/system/notice/notice.html       |    0
 .../resources/templates/system/post/add.html  |    0
 .../resources/templates/system/post/edit.html |    0
 .../resources/templates/system/post/post.html |    0
 .../resources/templates/system/role/add.html  |    0
 .../resources/templates/system/role/edit.html |    0
 .../resources/templates/system/role/role.html |    0
 .../resources/templates/system/role/rule.html |    0
 .../resources/templates/system/user/add.html  |    0
 .../resources/templates/system/user/edit.html |    0
 .../templates/system/user/profile/avatar.html |    0
 .../templates/system/user/profile/edit.html   |    0
 .../system/user/profile/profile.html          |    0
 .../system/user/profile/resetPwd.html         |    0
 .../templates/system/user/resetPwd.html       |    0
 .../resources/templates/system/user/user.html |    0
 .../resources/templates/tool/build/build.html |    0
 .../resources/templates/tool/gen/gen.html     |    0
 .../resources/templates/vm/html/add.html.vm   |    0
 .../resources/templates/vm/html/edit.html.vm  |    0
 .../resources/templates/vm/html/list.html.vm  |    0
 .../templates/vm/java/Controller.java.vm      |    0
 .../templates/vm/java/Mapper.java.vm          |    0
 .../templates/vm/java/Service.java.vm         |    0
 .../templates/vm/java/ServiceImpl.java.vm     |    0
 .../templates/vm/java/domain.java.vm          |    0
 .../main/resources/templates/vm/sql/sql.vm    |    0
 .../resources/templates/vm/xml/Mapper.xml.vm  |    0
 ruoyi-common/pom.xml                          |   74 +
 .../ruoyi/common}/annotation/DataScope.java   |    2 +-
 .../ruoyi/common}/annotation/DataSource.java  |   45 +-
 .../com/ruoyi/common}/annotation/Excel.java   |    2 +-
 .../com/ruoyi/common}/annotation/Log.java     |   23 +-
 .../com/ruoyi/common/base}/AjaxResult.java    |    2 +-
 .../com/ruoyi/common/base}/BaseEntity.java    |    6 +-
 .../java/com/ruoyi/common/config/Global.java  |  164 +
 .../com/ruoyi/common/constant/Constants.java  |    0
 .../common/constant/PermissionConstants.java  |   54 +-
 .../common/constant/ScheduleConstants.java    |    0
 .../ruoyi/common/constant/ShiroConstants.java |    0
 .../ruoyi/common/constant/UserConstants.java  |    0
 .../ruoyi/common}/enums/BusinessStatus.java   |   39 +-
 .../com/ruoyi/common}/enums/BusinessType.java |  119 +-
 .../ruoyi/common}/enums/DataSourceType.java   |   38 +-
 .../com/ruoyi/common/enums/OnlineStatus.java  |   24 +
 .../com/ruoyi/common}/enums/OperatorType.java |   51 +-
 .../com/ruoyi/common/enums}/UserStatus.java   |    3 +-
 .../common/exception/DemoModeException.java   |    0
 .../FileNameLengthLimitExceededException.java |    0
 .../file/InvalidExtensionException.java       |    0
 .../common/exception/job/TaskException.java   |   66 +-
 .../main/java/com/ruoyi/common/json/JSON.java |  187 +
 .../com/ruoyi/common/json/JSONObject.java     |  746 +++
 .../com/ruoyi/common/support/CharsetKit.java  |    1 -
 .../com/ruoyi/common/support/Convert.java     |    4 +-
 .../ruoyi/common/support/StrFormatter.java    |    1 -
 .../com/ruoyi/common/utils/AddressUtils.java  |   27 +-
 .../com/ruoyi/common/utils/DateUtils.java     |    0
 .../com/ruoyi/common/utils}/ExcelUtil.java    |   10 +-
 .../java/com/ruoyi/common/utils/IpUtils.java  |    0
 .../com/ruoyi/common/utils/MapDataUtil.java   |    0
 .../java/com/ruoyi/common/utils/Md5Utils.java |  132 +-
 .../com/ruoyi/common/utils/StringUtils.java   |   14 -
 .../java/com/ruoyi/common/utils/YamlUtil.java |   87 +
 .../ruoyi/common/utils/bean/BeanUtils.java    |  244 +-
 .../ruoyi/common/utils/file/FileUtils.java    |  178 +-
 .../ruoyi/common/utils/http/HttpUtils.java    |  494 +-
 .../java/com/ruoyi/common/xss/XssFilter.java  |    0
 .../xss/XssHttpServletRequestWrapper.java     |    0
 ruoyi-framework/pom.xml                       |   99 +
 .../framework/aspectj/DataScopeAspect.java    |   18 +-
 .../framework/aspectj/DataSourceAspect.java   |  118 +-
 .../ruoyi/framework/aspectj/LogAspect.java    |   30 +-
 .../ruoyi/framework/config/CaptchaConfig.java |    0
 .../ruoyi/framework/config/DruidConfig.java   |    2 +-
 .../ruoyi/framework/config/FilterConfig.java  |    4 +-
 .../com/ruoyi/framework/config/GenConfig.java |    7 -
 .../ruoyi/framework/config/I18nConfig.java    |    0
 .../framework/config/KaptchaTextCreator.java  |    0
 .../framework/config/ResourcesConfig.java     |    3 +-
 .../ruoyi/framework/config/ShiroConfig.java   |    0
 .../datasource/DynamicDataSource.java         |   50 +-
 .../DynamicDataSourceContextHolder.java       |   90 +-
 .../ruoyi/framework/manager/AsyncManager.java |    0
 .../manager/factory/AsyncFactory.java         |   35 +-
 .../framework/shiro/realm/UserRealm.java      |   30 +-
 .../framework/shiro/service/LoginService.java |   30 +-
 .../shiro/service/PasswordService.java        |   12 +-
 .../shiro/session}/OnlineSession.java         |   20 +-
 .../shiro/session/OnlineSessionDAO.java       |   17 +-
 .../shiro/session/OnlineSessionFactory.java   |   15 +-
 .../shiro/web/filter/LogoutFilter.java        |    8 +-
 .../filter/captcha/CaptchaValidateFilter.java |    2 +-
 .../filter/online/OnlineSessionFilter.java    |   11 +-
 .../filter/sync/SyncOnlineSessionFilter.java  |    2 +-
 .../web/session/OnlineWebSessionManager.java  |   14 +-
 .../SpringSessionValidationScheduler.java     |    0
 .../framework/util}/FileUploadUtils.java      |   10 +-
 .../com/ruoyi/framework/util}/LogUtils.java   |   20 +-
 .../ruoyi/framework/util}/MessageUtils.java   |    3 +-
 .../framework/util}/PermissionUtils.java      |   92 +-
 .../ruoyi/framework/util}/ServletUtils.java   |    3 +-
 .../com/ruoyi/framework/util}/ShiroUtils.java |   24 +-
 .../ruoyi/framework/util}/SpringUtils.java    |    2 +-
 .../exception/DefaultExceptionHandler.java    |    5 +-
 .../web}/exception/base/BaseException.java    |   12 +-
 .../web}/exception/user/CaptchaException.java |    2 +-
 .../exception/user/RoleBlockedException.java  |    3 +-
 .../exception/user/UserBlockedException.java  |    2 +-
 .../exception/user/UserDeleteException.java   |    2 +-
 .../web}/exception/user/UserException.java    |    5 +-
 .../user/UserNotExistsException.java          |    2 +-
 .../user/UserPasswordNotMatchException.java   |    2 +-
 .../UserPasswordRetryLimitCountException.java |    2 +-
 ...UserPasswordRetryLimitExceedException.java |    2 +-
 .../ruoyi/framework/web/page/PageDomain.java  |    4 +-
 .../framework/web/page/TableDataInfo.java     |    0
 .../framework/web/page/TableSupport.java      |    3 +-
 .../framework/web/service/ConfigService.java  |    5 +-
 .../framework/web/service/DictService.java    |    8 +-
 .../web/service/PermissionService.java        |    1 -
 ruoyi-generator/pom.xml                       |   46 +
 .../ruoyi/generator}/domain/ColumnInfo.java   |    2 +-
 .../ruoyi/generator}/domain/TableInfo.java    |   13 +-
 .../ruoyi/generator}/mapper/GenMapper.java    |    6 +-
 .../ruoyi/generator}/service/IGenService.java |    6 +-
 .../service/impl}/GenServiceImpl.java         |   24 +-
 .../com/ruoyi/generator}/util/GenUtils.java   |   50 +-
 .../generator}/util/VelocityInitializer.java  |    5 +-
 .../resources/mapper/generator}/GenMapper.xml |    2 +-
 ruoyi-quartz/pom.xml                          |   47 +
 .../ruoyi/quartz}/config/ScheduleConfig.java  |    4 +-
 .../java/com/ruoyi/quartz/domain/SysJob.java  |   10 +-
 .../com/ruoyi/quartz/domain/SysJobLog.java    |    8 +-
 .../ruoyi/quartz/mapper/SysJobLogMapper.java  |   14 +-
 .../com/ruoyi/quartz/mapper/SysJobMapper.java |   18 +-
 .../quartz/service/ISysJobLogService.java     |   12 +-
 .../ruoyi/quartz/service/ISysJobService.java  |   24 +-
 .../service/impl/SysJobLogServiceImpl.java    |   19 +-
 .../service/impl/SysJobServiceImpl.java       |   42 +-
 .../java/com/ruoyi/quartz}/task/RyTask.java   |    2 +-
 .../com/ruoyi/quartz}/util/ScheduleJob.java   |   19 +-
 .../ruoyi/quartz}/util/ScheduleRunnable.java  |   11 +-
 .../com/ruoyi/quartz}/util/ScheduleUtils.java |   15 +-
 .../ruoyi/quartz/util/SpringContextUtil.java  |   49 +
 .../mapper/quartz/SysJobLogMapper.xml         |   12 +-
 .../resources/mapper/quartz/SysJobMapper.xml  |   14 +-
 ruoyi-system/pom.xml                          |   42 +
 .../com/ruoyi/system/domain/SysConfig.java    |    8 +-
 .../java/com/ruoyi/system/domain/SysDept.java |    7 +-
 .../com/ruoyi/system/domain/SysDictData.java  |   14 +-
 .../com/ruoyi/system/domain/SysDictType.java  |   10 +-
 .../ruoyi/system/domain/SysLogininfor.java    |   26 +-
 .../java/com/ruoyi/system/domain/SysMenu.java |   12 +-
 .../com/ruoyi/system/domain/SysNotice.java    |   10 +-
 .../com/ruoyi/system/domain/SysOperLog.java   |   14 +-
 .../java/com/ruoyi/system/domain/SysPost.java |    8 +-
 .../java/com/ruoyi/system/domain/SysRole.java |    8 +-
 .../com/ruoyi/system/domain/SysRoleDept.java  |    4 +-
 .../com/ruoyi/system/domain/SysRoleMenu.java  |    4 +-
 .../java/com/ruoyi/system/domain/SysUser.java |   35 +-
 .../ruoyi/system/domain/SysUserOnline.java    |   25 +-
 .../com/ruoyi/system/domain/SysUserPost.java  |    5 +-
 .../com/ruoyi/system/domain/SysUserRole.java  |    4 +-
 .../ruoyi/system/mapper/SysConfigMapper.java  |   16 +-
 .../ruoyi/system/mapper/SysDeptMapper.java    |   20 +-
 .../system/mapper/SysDictDataMapper.java      |   16 +-
 .../system/mapper/SysDictTypeMapper.java      |   18 +-
 .../system/mapper/SysLogininforMapper.java    |   12 +-
 .../ruoyi/system/mapper/SysMenuMapper.java    |   22 +-
 .../ruoyi/system/mapper/SysNoticeMapper.java  |   14 +-
 .../ruoyi/system/mapper/SysOperLogMapper.java |   12 +-
 .../ruoyi/system/mapper/SysPostMapper.java    |   22 +-
 .../system/mapper/SysRoleDeptMapper.java      |    8 +-
 .../ruoyi/system/mapper/SysRoleMapper.java    |   20 +-
 .../system/mapper/SysRoleMenuMapper.java      |    8 +-
 .../ruoyi/system/mapper/SysUserMapper.java    |   24 +-
 .../system/mapper/SysUserOnlineMapper.java    |   14 +-
 .../system/mapper/SysUserPostMapper.java      |    8 +-
 .../system/mapper/SysUserRoleMapper.java      |    8 +-
 .../system/service/ISysConfigService.java     |   16 +-
 .../ruoyi/system/service/ISysDeptService.java |   21 +-
 .../system/service/ISysDictDataService.java   |   16 +-
 .../system/service/ISysDictTypeService.java   |   18 +-
 .../system/service/ISysLogininforService.java |   12 +-
 .../ruoyi/system/service/ISysMenuService.java |   26 +-
 .../system/service/ISysNoticeService.java     |   14 +-
 .../system/service/ISysOperLogService.java    |   14 +-
 .../ruoyi/system/service/ISysPostService.java |   22 +-
 .../ruoyi/system/service/ISysRoleService.java |   28 +-
 .../system/service/ISysUserOnlineService.java |   14 +-
 .../ruoyi/system/service/ISysUserService.java |   28 +-
 .../service/impl/SysConfigServiceImpl.java    |   32 +-
 .../service/impl/SysDeptServiceImpl.java      |   52 +-
 .../service/impl/SysDictDataServiceImpl.java  |   24 +-
 .../service/impl/SysDictTypeServiceImpl.java  |   36 +-
 .../impl/SysLogininforServiceImpl.java        |   18 +-
 .../service/impl/SysMenuServiceImpl.java      |  138 +-
 .../service/impl/SysNoticeServiceImpl.java    |   23 +-
 .../service/impl/SysOperLogServiceImpl.java   |   19 +-
 .../service/impl/SysPostServiceImpl.java      |   48 +-
 .../service/impl/SysRoleServiceImpl.java      |  605 +-
 .../impl/SysUserOnlineServiceImpl.java        |   44 +-
 .../service/impl/SysUserServiceImpl.java      |   97 +-
 .../main/resources/mapper}/mybatis-config.xml |    0
 .../mapper/system/SysConfigMapper.xml         |   14 +-
 .../resources/mapper/system/SysDeptMapper.xml |   16 +-
 .../mapper/system/SysDictDataMapper.xml       |   14 +-
 .../mapper/system/SysDictTypeMapper.xml       |   16 +-
 .../mapper/system/SysLogininforMapper.xml     |   14 +-
 .../resources/mapper/system/SysMenuMapper.xml |   20 +-
 .../mapper/system/SysNoticeMapper.xml         |   12 +-
 .../mapper/system/SysOperLogMapper.xml        |   10 +-
 .../resources/mapper/system/SysPostMapper.xml |   20 +-
 .../mapper/system/SysRoleDeptMapper.xml       |    4 +-
 .../resources/mapper/system/SysRoleMapper.xml |   18 +-
 .../mapper/system/SysRoleMenuMapper.xml       |    4 +-
 .../resources/mapper/system/SysUserMapper.xml |   28 +-
 .../mapper/system/SysUserOnlineMapper.xml     |   20 +-
 .../mapper/system/SysUserPostMapper.xml       |    4 +-
 .../mapper/system/SysUserRoleMapper.xml       |    4 +-
 ry.sh                                         |   86 -
 sql/ruoyi.pdb                                 | 4851 +++++++++++++++++
 .../com/ruoyi/common/constant/CommonMap.java  |   47 -
 .../com/ruoyi/common/utils/TreeUtils.java     |  143 -
 .../ruoyi/framework/config/RuoYiConfig.java   |   85 -
 438 files changed, 9987 insertions(+), 3978 deletions(-)
 create mode 100644 ruoyi-admin/pom.xml
 rename {src => ruoyi-admin/src}/main/java/com/ruoyi/RuoYiApplication.java (94%)
 rename {src => ruoyi-admin/src}/main/java/com/ruoyi/RuoYiServletInitializer.java (100%)
 rename {src/main/java/com/ruoyi/project => ruoyi-admin/src/main/java/com/ruoyi/web/controller}/common/CommonController.java (90%)
 rename {src/main/java/com/ruoyi/project/monitor/druid => ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor}/DruidController.java (82%)
 rename {src/main/java/com/ruoyi/project/monitor/job/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor}/JobController.java (73%)
 rename {src/main/java/com/ruoyi/project/monitor/job/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor}/JobLogController.java (67%)
 rename {src/main/java/com/ruoyi/project/monitor/logininfor/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor}/LogininforController.java (66%)
 rename {src/main/java/com/ruoyi/project/monitor/operlog/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor}/OperlogController.java (70%)
 rename {src/main/java/com/ruoyi/project/monitor/online/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor}/UserOnlineController.java (69%)
 rename {src/main/java/com/ruoyi/project/system/user/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/system}/CaptchaController.java (93%)
 rename {src/main/java/com/ruoyi/project/system/config/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/system}/ConfigController.java (71%)
 rename {src/main/java/com/ruoyi/project/system/dept/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/system}/DeptController.java (78%)
 rename {src/main/java/com/ruoyi/project/system/dict/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/system}/DictDataController.java (70%)
 rename {src/main/java/com/ruoyi/project/system/dict/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/system}/DictTypeController.java (73%)
 rename {src/main/java/com/ruoyi/project/system/user/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/system}/IndexController.java (53%)
 rename {src/main/java/com/ruoyi/project/system/user/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/system}/LoginController.java (87%)
 rename {src/main/java/com/ruoyi/project/system/menu/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/system}/MenuController.java (74%)
 rename {src/main/java/com/ruoyi/project/system/notice/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/system}/NoticeController.java (74%)
 rename {src/main/java/com/ruoyi/project/system/post/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/system}/PostController.java (71%)
 rename {src/main/java/com/ruoyi/project/system/user/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/system}/ProfileController.java (76%)
 rename {src/main/java/com/ruoyi/project/system/role/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/system}/RoleController.java (73%)
 rename {src/main/java/com/ruoyi/project/system/user/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/system}/UserController.java (67%)
 rename {src/main/java/com/ruoyi/project/tool/build => ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool}/BuildController.java (82%)
 rename {src/main/java/com/ruoyi/project/tool/gen/controller => ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool}/GenController.java (87%)
 rename {src/main/java/com/ruoyi/project/tool/swagger => ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool}/SwaggerController.java (81%)
 rename {src/main/java/com/ruoyi/project/tool/swagger => ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool}/TestController.java (91%)
 rename {src/main/java/com/ruoyi/framework/web/controller => ruoyi-admin/src/main/java/com/ruoyi/web/core/base}/BaseController.java (88%)
 rename {src/main/java/com/ruoyi/framework => ruoyi-admin/src/main/java/com/ruoyi/web/core}/config/SwaggerConfig.java (80%)
 rename {src => ruoyi-admin/src}/main/resources/application-druid.yml (100%)
 rename {src => ruoyi-admin/src}/main/resources/application.yml (87%)
 rename {src => ruoyi-admin/src}/main/resources/banner.txt (100%)
 rename {src => ruoyi-admin/src}/main/resources/ehcache/ehcache-shiro.xml (100%)
 rename {src => ruoyi-admin/src}/main/resources/i18n/messages.properties (100%)
 rename {src => ruoyi-admin/src}/main/resources/logback.xml (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/beautifyhtml/beautifyhtml.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/blockUI/jquery.blockUI.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/bootstrap-table/bootstrap-table.min.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/bootstrap-table/bootstrap-table.min.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/bootstrap-table/extensions/editable/bootstrap-table-editable.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/bootstrap-table/extensions/editable/bootstrap-table-editable.min.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/bootstrap-table/extensions/export/bootstrap-table-export.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/bootstrap-table/extensions/export/tableExport.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.min.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.min.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/bootstrap-treetable/bootstrap-treetable.css (99%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/bootstrap-treetable/bootstrap-treetable.js (97%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/cropbox/cropbox.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/cropbox/cropbox.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/datapicker/bootstrap-datepicker.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/datapicker/datepicker3.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/fullscreen/jquery.fullscreen.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/iCheck/custom.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/iCheck/green-login.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/iCheck/green.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/iCheck/green@2x.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/iCheck/icheck.min.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-layout/jquery.layout-latest.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-layout/jquery.layout-latest.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/1_close.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/1_open.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/2.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/3.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/4.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/5.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/6.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/7.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/8.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/9.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/line_conn.gif (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/loading.gif (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/zTreeStandard.gif (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/zTreeStandard.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/zTreeStyle.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/line_conn.gif (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/line_conn.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/loading.gif (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/metro.gif (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/metro.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/left_menu.gif (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/left_menu.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/line_conn.gif (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/loading.gif (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/zTreeStandard.gif (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/zTreeStandard.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/zTreeStyle.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.core-3.5.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.excheck-3.5.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.exedit-3.5.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.exhide-3.5.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/jquery-ztree/3.5/log v3.x.txt (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/layer/layer.min.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/layer/theme/default/icon-ext.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/layer/theme/default/icon.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/layer/theme/default/layer.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/layer/theme/default/loading-0.gif (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/layer/theme/default/loading-1.gif (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/layer/theme/default/loading-2.gif (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.eot (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.svg (98%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.ttf (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.woff (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/layui/css/modules/laydate/default/laydate.css (99%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/layui/lay/modules/laydate.js (99%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/layui/lay/modules/layer.js (99%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/layui/layui.js (99%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/select/select2.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/select/select2.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/summernote/font/summernote.woff (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/summernote/summernote-0.8.8.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/summernote/summernote-bs3.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/summernote/summernote-zh-CN.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/summernote/summernote-zh-CN.min.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/summernote/summernote.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/summernote/summernote.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/summernote/summernote.min.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/validate/additional-methods.min.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/validate/jquery.validate.extend.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/validate/jquery.validate.min.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ajax/libs/validate/messages_zh.min.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/css/animate.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/css/bootstrap.min.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/css/font-awesome.min.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/css/login.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/css/login.min.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/css/main/animate.min.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/css/main/bootstrap.min14ed.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/css/main/font-awesome.min93e3.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/css/main/style.min862f.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/css/patterns/header-profile-skin-blue.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/css/patterns/header-profile-skin-yellow.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/css/patterns/header-profile.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/css/patterns/shattered.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/css/style.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/favicon.ico (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/file/rml.txt (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/fonts/FontAwesome.otf (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/fonts/Simple-Line-Icons.woff2 (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/fonts/fontawesome-webfont.eot (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/fonts/fontawesome-webfont.svg (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/fonts/fontawesome-webfont.ttf (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/fonts/fontawesome-webfont.woff (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/fonts/fontawesome-webfont.woff2 (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/fonts/glyphicons-halflings-regular.eot (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/fonts/glyphicons-halflings-regular.svg (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/fonts/glyphicons-halflings-regular.ttf (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/fonts/glyphicons-halflings-regular.woff (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/fonts/glyphicons-halflings-regular.woff2 (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/img/blue.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/img/loading-upload.gif (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/img/loading.gif (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/img/locked.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/img/login-background.jpg (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/img/pay.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/img/profile.jpg (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/img/progress.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/img/qr_code.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/img/user.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/js/bootstrap.min.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/js/jquery-ui-1.10.4.min.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/js/jquery.min.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/js/plugins/metisMenu/jquery.metisMenu.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/js/plugins/slimscroll/jquery.slimscroll.min.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ruoyi.png (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ruoyi/css/ry-ui.css (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ruoyi/index.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ruoyi/js/common.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ruoyi/js/ry-ui.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/static/ruoyi/login.js (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/error/404.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/error/500.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/error/unauth.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/include.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/index.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/login.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/main.html (97%)
 rename {src => ruoyi-admin/src}/main/resources/templates/monitor/job/add.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/monitor/job/edit.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/monitor/job/job.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/monitor/job/jobLog.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/monitor/logininfor/logininfor.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/monitor/online/online.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/monitor/operlog/detail.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/monitor/operlog/operlog.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/config/add.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/config/config.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/config/edit.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/dept/add.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/dept/dept.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/dept/edit.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/dept/tree.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/dict/data/add.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/dict/data/data.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/dict/data/edit.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/dict/type/add.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/dict/type/edit.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/dict/type/type.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/menu/add.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/menu/edit.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/menu/icon.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/menu/menu.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/menu/tree.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/notice/add.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/notice/edit.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/notice/notice.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/post/add.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/post/edit.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/post/post.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/role/add.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/role/edit.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/role/role.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/role/rule.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/user/add.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/user/edit.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/user/profile/avatar.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/user/profile/edit.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/user/profile/profile.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/user/profile/resetPwd.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/user/resetPwd.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/system/user/user.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/tool/build/build.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/tool/gen/gen.html (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/vm/html/add.html.vm (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/vm/html/edit.html.vm (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/vm/html/list.html.vm (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/vm/java/Controller.java.vm (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/vm/java/Mapper.java.vm (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/vm/java/Service.java.vm (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/vm/java/ServiceImpl.java.vm (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/vm/java/domain.java.vm (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/vm/sql/sql.vm (100%)
 rename {src => ruoyi-admin/src}/main/resources/templates/vm/xml/Mapper.xml.vm (100%)
 create mode 100644 ruoyi-common/pom.xml
 rename {src/main/java/com/ruoyi/framework/aspectj/lang => ruoyi-common/src/main/java/com/ruoyi/common}/annotation/DataScope.java (85%)
 rename {src/main/java/com/ruoyi/framework/aspectj/lang => ruoyi-common/src/main/java/com/ruoyi/common}/annotation/DataSource.java (78%)
 rename {src/main/java/com/ruoyi/framework/aspectj/lang => ruoyi-common/src/main/java/com/ruoyi/common}/annotation/Excel.java (90%)
 rename {src/main/java/com/ruoyi/framework/aspectj/lang => ruoyi-common/src/main/java/com/ruoyi/common}/annotation/Log.java (65%)
 rename {src/main/java/com/ruoyi/framework/web/domain => ruoyi-common/src/main/java/com/ruoyi/common/base}/AjaxResult.java (92%)
 rename {src/main/java/com/ruoyi/framework/web/domain => ruoyi-common/src/main/java/com/ruoyi/common/base}/BaseEntity.java (89%)
 create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/config/Global.java
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/constant/Constants.java (100%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/constant/PermissionConstants.java (95%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/constant/ScheduleConstants.java (100%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/constant/ShiroConstants.java (100%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/constant/UserConstants.java (100%)
 rename {src/main/java/com/ruoyi/framework/aspectj/lang => ruoyi-common/src/main/java/com/ruoyi/common}/enums/BusinessStatus.java (75%)
 rename {src/main/java/com/ruoyi/framework/aspectj/lang => ruoyi-common/src/main/java/com/ruoyi/common}/enums/BusinessType.java (82%)
 rename {src/main/java/com/ruoyi/framework/aspectj/lang => ruoyi-common/src/main/java/com/ruoyi/common}/enums/DataSourceType.java (75%)
 create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/enums/OnlineStatus.java
 rename {src/main/java/com/ruoyi/framework/aspectj/lang => ruoyi-common/src/main/java/com/ruoyi/common}/enums/OperatorType.java (79%)
 rename {src/main/java/com/ruoyi/project/system/user/domain => ruoyi-common/src/main/java/com/ruoyi/common/enums}/UserStatus.java (84%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/exception/DemoModeException.java (100%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java (100%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java (100%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/exception/job/TaskException.java (94%)
 create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/json/JSON.java
 create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/json/JSONObject.java
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/support/CharsetKit.java (96%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/support/Convert.java (96%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/support/StrFormatter.java (95%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/utils/AddressUtils.java (53%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/utils/DateUtils.java (100%)
 rename {src/main/java/com/ruoyi/common/utils/poi => ruoyi-common/src/main/java/com/ruoyi/common/utils}/ExcelUtil.java (96%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/utils/IpUtils.java (100%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/utils/MapDataUtil.java (100%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/utils/Md5Utils.java (95%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/utils/StringUtils.java (91%)
 create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/YamlUtil.java
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/utils/bean/BeanUtils.java (96%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/utils/file/FileUtils.java (95%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/utils/http/HttpUtils.java (97%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/xss/XssFilter.java (100%)
 rename {src => ruoyi-common/src}/main/java/com/ruoyi/common/xss/XssHttpServletRequestWrapper.java (100%)
 create mode 100644 ruoyi-framework/pom.xml
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java (82%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java (89%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/aspectj/LogAspect.java (83%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/config/CaptchaConfig.java (100%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/config/DruidConfig.java (93%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/config/FilterConfig.java (90%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/config/GenConfig.java (83%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/config/I18nConfig.java (100%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/config/KaptchaTextCreator.java (100%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/config/ResourcesConfig.java (91%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/config/ShiroConfig.java (100%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/datasource/DynamicDataSource.java (96%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java (96%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/manager/AsyncManager.java (100%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java (75%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/shiro/realm/UserRealm.java (81%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/shiro/service/LoginService.java (81%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/shiro/service/PasswordService.java (85%)
 rename {src/main/java/com/ruoyi/project/monitor/online/domain => ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/session}/OnlineSession.java (81%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/shiro/session/OnlineSessionDAO.java (82%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/shiro/session/OnlineSessionFactory.java (72%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/shiro/web/filter/LogoutFilter.java (89%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/shiro/web/filter/captcha/CaptchaValidateFilter.java (95%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/shiro/web/filter/online/OnlineSessionFilter.java (88%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/shiro/web/filter/sync/SyncOnlineSessionFilter.java (92%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/shiro/web/session/OnlineWebSessionManager.java (87%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/shiro/web/session/SpringSessionValidationScheduler.java (100%)
 rename {src/main/java/com/ruoyi/common/utils/file => ruoyi-framework/src/main/java/com/ruoyi/framework/util}/FileUploadUtils.java (90%)
 rename {src/main/java/com/ruoyi/common/utils => ruoyi-framework/src/main/java/com/ruoyi/framework/util}/LogUtils.java (90%)
 rename {src/main/java/com/ruoyi/common/utils => ruoyi-framework/src/main/java/com/ruoyi/framework/util}/MessageUtils.java (82%)
 rename {src/main/java/com/ruoyi/common/utils/security => ruoyi-framework/src/main/java/com/ruoyi/framework/util}/PermissionUtils.java (85%)
 rename {src/main/java/com/ruoyi/common/utils => ruoyi-framework/src/main/java/com/ruoyi/framework/util}/ServletUtils.java (93%)
 rename {src/main/java/com/ruoyi/common/utils/security => ruoyi-framework/src/main/java/com/ruoyi/framework/util}/ShiroUtils.java (74%)
 rename {src/main/java/com/ruoyi/common/utils/spring => ruoyi-framework/src/main/java/com/ruoyi/framework/util}/SpringUtils.java (95%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/web/exception/DefaultExceptionHandler.java (91%)
 rename {src/main/java/com/ruoyi/common => ruoyi-framework/src/main/java/com/ruoyi/framework/web}/exception/base/BaseException.java (81%)
 rename {src/main/java/com/ruoyi/common => ruoyi-framework/src/main/java/com/ruoyi/framework/web}/exception/user/CaptchaException.java (79%)
 rename {src/main/java/com/ruoyi/common => ruoyi-framework/src/main/java/com/ruoyi/framework/web}/exception/user/RoleBlockedException.java (81%)
 rename {src/main/java/com/ruoyi/common => ruoyi-framework/src/main/java/com/ruoyi/framework/web}/exception/user/UserBlockedException.java (81%)
 rename {src/main/java/com/ruoyi/common => ruoyi-framework/src/main/java/com/ruoyi/framework/web}/exception/user/UserDeleteException.java (80%)
 rename {src/main/java/com/ruoyi/common => ruoyi-framework/src/main/java/com/ruoyi/framework/web}/exception/user/UserException.java (67%)
 rename {src/main/java/com/ruoyi/common => ruoyi-framework/src/main/java/com/ruoyi/framework/web}/exception/user/UserNotExistsException.java (80%)
 rename {src/main/java/com/ruoyi/common => ruoyi-framework/src/main/java/com/ruoyi/framework/web}/exception/user/UserPasswordNotMatchException.java (82%)
 rename {src/main/java/com/ruoyi/common => ruoyi-framework/src/main/java/com/ruoyi/framework/web}/exception/user/UserPasswordRetryLimitCountException.java (84%)
 rename {src/main/java/com/ruoyi/common => ruoyi-framework/src/main/java/com/ruoyi/framework/web}/exception/user/UserPasswordRetryLimitExceedException.java (85%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/web/page/PageDomain.java (94%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/web/page/TableDataInfo.java (100%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/web/page/TableSupport.java (90%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/web/service/ConfigService.java (80%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/web/service/DictService.java (77%)
 rename {src => ruoyi-framework/src}/main/java/com/ruoyi/framework/web/service/PermissionService.java (95%)
 create mode 100644 ruoyi-generator/pom.xml
 rename {src/main/java/com/ruoyi/project/tool/gen => ruoyi-generator/src/main/java/com/ruoyi/generator}/domain/ColumnInfo.java (92%)
 rename {src/main/java/com/ruoyi/project/tool/gen => ruoyi-generator/src/main/java/com/ruoyi/generator}/domain/TableInfo.java (79%)
 rename {src/main/java/com/ruoyi/project/tool/gen => ruoyi-generator/src/main/java/com/ruoyi/generator}/mapper/GenMapper.java (78%)
 rename {src/main/java/com/ruoyi/project/tool/gen => ruoyi-generator/src/main/java/com/ruoyi/generator}/service/IGenService.java (81%)
 rename {src/main/java/com/ruoyi/project/tool/gen/service => ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl}/GenServiceImpl.java (83%)
 rename {src/main/java/com/ruoyi/project/tool/gen => ruoyi-generator/src/main/java/com/ruoyi/generator}/util/GenUtils.java (76%)
 rename {src/main/java/com/ruoyi/project/tool/gen => ruoyi-generator/src/main/java/com/ruoyi/generator}/util/VelocityInitializer.java (78%)
 rename {src/main/resources/mybatis/tool => ruoyi-generator/src/main/resources/mapper/generator}/GenMapper.xml (94%)
 create mode 100644 ruoyi-quartz/pom.xml
 rename {src/main/java/com/ruoyi/framework => ruoyi-quartz/src/main/java/com/ruoyi/quartz}/config/ScheduleConfig.java (91%)
 rename src/main/java/com/ruoyi/project/monitor/job/domain/Job.java => ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java (88%)
 rename src/main/java/com/ruoyi/project/monitor/job/domain/JobLog.java => ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java (89%)
 rename src/main/java/com/ruoyi/project/monitor/job/mapper/JobLogMapper.java => ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java (73%)
 rename src/main/java/com/ruoyi/project/monitor/job/mapper/JobMapper.java => ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java (69%)
 rename src/main/java/com/ruoyi/project/monitor/job/service/IJobLogService.java => ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java (73%)
 rename src/main/java/com/ruoyi/project/monitor/job/service/IJobService.java => ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java (70%)
 rename src/main/java/com/ruoyi/project/monitor/job/service/JobLogServiceImpl.java => ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java (74%)
 rename src/main/java/com/ruoyi/project/monitor/job/service/JobServiceImpl.java => ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java (76%)
 rename {src/main/java/com/ruoyi/project/monitor/job => ruoyi-quartz/src/main/java/com/ruoyi/quartz}/task/RyTask.java (84%)
 rename {src/main/java/com/ruoyi/project/monitor/job => ruoyi-quartz/src/main/java/com/ruoyi/quartz}/util/ScheduleJob.java (83%)
 rename {src/main/java/com/ruoyi/project/monitor/job => ruoyi-quartz/src/main/java/com/ruoyi/quartz}/util/ScheduleRunnable.java (76%)
 rename {src/main/java/com/ruoyi/project/monitor/job => ruoyi-quartz/src/main/java/com/ruoyi/quartz}/util/ScheduleUtils.java (90%)
 create mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/SpringContextUtil.java
 rename src/main/resources/mybatis/monitor/JobLogMapper.xml => ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml (87%)
 rename src/main/resources/mybatis/monitor/JobMapper.xml => ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml (88%)
 create mode 100644 ruoyi-system/pom.xml
 rename src/main/java/com/ruoyi/project/system/config/domain/Config.java => ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java (88%)
 rename src/main/java/com/ruoyi/project/system/dept/domain/Dept.java => ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDept.java (91%)
 rename src/main/java/com/ruoyi/project/system/dict/domain/DictData.java => ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictData.java (89%)
 rename src/main/java/com/ruoyi/project/system/dict/domain/DictType.java => ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictType.java (84%)
 rename src/main/java/com/ruoyi/project/monitor/logininfor/domain/Logininfor.java => ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java (88%)
 rename src/main/java/com/ruoyi/project/system/menu/domain/Menu.java => ruoyi-system/src/main/java/com/ruoyi/system/domain/SysMenu.java (87%)
 rename src/main/java/com/ruoyi/project/system/notice/domain/Notice.java => ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java (89%)
 rename src/main/java/com/ruoyi/project/monitor/operlog/domain/OperLog.java => ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java (88%)
 rename src/main/java/com/ruoyi/project/system/post/domain/Post.java => ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java (88%)
 rename src/main/java/com/ruoyi/project/system/role/domain/Role.java => ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRole.java (90%)
 rename src/main/java/com/ruoyi/project/system/role/domain/RoleDept.java => ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java (87%)
 rename src/main/java/com/ruoyi/project/system/role/domain/RoleMenu.java => ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java (87%)
 rename src/main/java/com/ruoyi/project/system/user/domain/User.java => ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUser.java (81%)
 rename src/main/java/com/ruoyi/project/monitor/online/domain/UserOnline.java => ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java (83%)
 rename src/main/java/com/ruoyi/project/system/user/domain/UserPost.java => ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java (87%)
 rename src/main/java/com/ruoyi/project/system/user/domain/UserRole.java => ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java (87%)
 rename src/main/java/com/ruoyi/project/system/config/mapper/ConfigMapper.java => ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java (66%)
 rename src/main/java/com/ruoyi/project/system/dept/mapper/DeptMapper.java => ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java (70%)
 rename src/main/java/com/ruoyi/project/system/dict/mapper/DictDataMapper.java => ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java (78%)
 rename src/main/java/com/ruoyi/project/system/dict/mapper/DictTypeMapper.java => ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java (69%)
 rename src/main/java/com/ruoyi/project/monitor/logininfor/mapper/LogininforMapper.java => ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java (64%)
 rename src/main/java/com/ruoyi/project/system/menu/mapper/MenuMapper.java => ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java (72%)
 rename src/main/java/com/ruoyi/project/system/notice/mapper/NoticeMapper.java => ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java (64%)
 rename src/main/java/com/ruoyi/project/monitor/operlog/mapper/OperLogMapper.java => ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java (66%)
 rename src/main/java/com/ruoyi/project/system/post/mapper/PostMapper.java => ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java (65%)
 rename src/main/java/com/ruoyi/project/system/role/mapper/RoleDeptMapper.java => ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java (76%)
 rename src/main/java/com/ruoyi/project/system/role/mapper/RoleMapper.java => ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java (69%)
 rename src/main/java/com/ruoyi/project/system/role/mapper/RoleMenuMapper.java => ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java (76%)
 rename src/main/java/com/ruoyi/project/system/user/mapper/UserMapper.java => ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java (70%)
 rename src/main/java/com/ruoyi/project/monitor/online/mapper/UserOnlineMapper.java => ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserOnlineMapper.java (62%)
 rename src/main/java/com/ruoyi/project/system/user/mapper/UserPostMapper.java => ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java (76%)
 rename src/main/java/com/ruoyi/project/system/user/mapper/UserRoleMapper.java => ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java (75%)
 rename src/main/java/com/ruoyi/project/system/config/service/IConfigService.java => ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java (69%)
 rename src/main/java/com/ruoyi/project/system/dept/service/IDeptService.java => ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java (72%)
 rename src/main/java/com/ruoyi/project/system/dict/service/IDictDataService.java => ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java (73%)
 rename src/main/java/com/ruoyi/project/system/dict/service/IDictTypeService.java => ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java (69%)
 rename src/main/java/com/ruoyi/project/monitor/logininfor/service/ILogininforService.java => ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java (64%)
 rename src/main/java/com/ruoyi/project/system/menu/service/IMenuService.java => ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java (72%)
 rename src/main/java/com/ruoyi/project/system/notice/service/INoticeService.java => ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java (63%)
 rename src/main/java/com/ruoyi/project/monitor/operlog/service/IOperLogService.java => ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java (65%)
 rename src/main/java/com/ruoyi/project/system/post/service/IPostService.java => ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java (69%)
 rename src/main/java/com/ruoyi/project/system/role/service/IRoleService.java => ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java (73%)
 rename src/main/java/com/ruoyi/project/monitor/online/service/IUserOnlineService.java => ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOnlineService.java (69%)
 rename src/main/java/com/ruoyi/project/system/user/service/IUserService.java => ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java (74%)
 rename src/main/java/com/ruoyi/project/system/config/service/ConfigServiceImpl.java => ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java (69%)
 rename src/main/java/com/ruoyi/project/system/dept/service/DeptServiceImpl.java => ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java (75%)
 rename src/main/java/com/ruoyi/project/system/dict/service/DictDataServiceImpl.java => ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java (73%)
 rename src/main/java/com/ruoyi/project/system/dict/service/DictTypeServiceImpl.java => ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java (69%)
 rename src/main/java/com/ruoyi/project/monitor/logininfor/service/LogininforServiceImpl.java => ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java (68%)
 rename src/main/java/com/ruoyi/project/system/menu/service/MenuServiceImpl.java => ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java (61%)
 rename src/main/java/com/ruoyi/project/system/notice/service/NoticeServiceImpl.java => ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java (62%)
 rename src/main/java/com/ruoyi/project/monitor/operlog/service/OperLogServiceImpl.java => ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java (69%)
 rename src/main/java/com/ruoyi/project/system/post/service/PostServiceImpl.java => ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java (70%)
 rename src/main/java/com/ruoyi/project/system/role/service/RoleServiceImpl.java => ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java (71%)
 rename src/main/java/com/ruoyi/project/monitor/online/service/UserOnlineServiceImpl.java => ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java (60%)
 rename src/main/java/com/ruoyi/project/system/user/service/UserServiceImpl.java => ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java (69%)
 rename {src/main/resources/mybatis => ruoyi-system/src/main/resources/mapper}/mybatis-config.xml (100%)
 rename src/main/resources/mybatis/system/ConfigMapper.xml => ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml (88%)
 rename src/main/resources/mybatis/system/DeptMapper.xml => ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml (89%)
 rename src/main/resources/mybatis/system/DictDataMapper.xml => ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml (89%)
 rename src/main/resources/mybatis/system/DictTypeMapper.xml => ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml (86%)
 rename src/main/resources/mybatis/monitor/LogininforMapper.xml => ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml (84%)
 rename src/main/resources/mybatis/system/MenuMapper.xml => ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml (88%)
 rename src/main/resources/mybatis/system/NoticeMapper.xml => ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml (88%)
 rename src/main/resources/mybatis/monitor/OperLogMapper.xml => ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml (88%)
 rename src/main/resources/mybatis/system/PostMapper.xml => ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml (85%)
 rename src/main/resources/mybatis/system/RoleDeptMapper.xml => ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml (85%)
 rename src/main/resources/mybatis/system/RoleMapper.xml => ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml (89%)
 rename src/main/resources/mybatis/system/RoleMenuMapper.xml => ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml (85%)
 rename src/main/resources/mybatis/system/UserMapper.xml => ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml (90%)
 rename src/main/resources/mybatis/monitor/OnlineMapper.xml => ruoyi-system/src/main/resources/mapper/system/SysUserOnlineMapper.xml (72%)
 rename src/main/resources/mybatis/system/UserPostMapper.xml => ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml (85%)
 rename src/main/resources/mybatis/system/UserRoleMapper.xml => ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml (85%)
 delete mode 100644 ry.sh
 create mode 100644 sql/ruoyi.pdb
 delete mode 100644 src/main/java/com/ruoyi/common/constant/CommonMap.java
 delete mode 100644 src/main/java/com/ruoyi/common/utils/TreeUtils.java
 delete mode 100644 src/main/java/com/ruoyi/framework/config/RuoYiConfig.java

diff --git a/README.md b/README.md
index 82760ab3..770a1d00 100644
--- a/README.md
+++ b/README.md
@@ -10,9 +10,9 @@ http://www.zi-han.net/theme/hplus
 
 http://webapplayers.com/inspinia_admin-v2.7.1
 
-阿里云优惠活动(2CPU 4GRAM 1M带宽 40G高效云盘):https://promotion.aliyun.com/ntms/act/vm/aliyun-group/buy.html?group=BphATfDhsQ
+> RuoYi从3.0开始,进行模块拆分,将原先的单应用转变为多模块,如需单应用,请移步 [RuoYi-fast](https://gitee.com/y_project/RuoYi-fast)  
 
-云产品通用1000元代金券,可叠加官网常规优惠使用 :https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=brki8iof
+> 推荐使用阿里云部署,通用云产品代金券 :[点我领取](https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=brki8iof)
 
 ## 内置功能
 
diff --git a/pom.xml b/pom.xml
index 9610af1e..56d6aa24 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,261 +1,82 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
+	
+    <groupId>com.ruoyi</groupId>
+    <artifactId>ruoyi</artifactId>
+    <version>3.0</version>
 
-	<groupId>com.ruoyi</groupId>
-	<artifactId>RuoYi</artifactId>
-	<version>3.0.0</version>
-	<packaging>jar</packaging>
-
-	<name>RuoYi</name>
-	<description>若依管理系统</description>
-
-	<parent>
-		<groupId>org.springframework.boot</groupId>
-		<artifactId>spring-boot-starter-parent</artifactId>
-		<version>2.0.5.RELEASE</version>
-		<relativePath />
-	</parent>
-
-	<properties>
+    <name>ruoyi</name>
+	<url>http://www.ruoyi.vip</url>
+    <description>若依管理系统</description>
+    
+    <properties>
+	    <ruoyi.version>3.0</ruoyi.version>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 		<java.version>1.8</java.version>
 		<shiro.version>1.4.0</shiro.version>
 		<thymeleaf.extras.shiro.version>2.0.0</thymeleaf.extras.shiro.version>
-		<mybatis.spring.boot.starter.version>1.3.2</mybatis.spring.boot.starter.version>
-		<pagehelper.spring.boot.starter.version>1.2.5</pagehelper.spring.boot.starter.version>
-		<fastjson.version>1.2.47</fastjson.version>
+		<mybatis.boot.version>1.3.2</mybatis.boot.version>
 		<druid.version>1.1.10</druid.version>
-		<commons.io.version>2.5</commons.io.version>
-		<commons.fileupload.version>1.3.3</commons.fileupload.version>
 		<bitwalker.version>1.19</bitwalker.version>
-		<lombok.version>1.16.18</lombok.version>
-		<velocity.version>1.7</velocity.version>
 		<kaptcha.version>2.3.2</kaptcha.version>
 		<swagger.version>2.7.0</swagger.version>
-		<jsoup.version>1.11.3</jsoup.version>
-		<poi.version>3.17</poi.version>
 	</properties>
+	
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>2.0.5.RELEASE</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <modules>
+	    <module>ruoyi-admin</module>
+		<module>ruoyi-framework</module>
+		<module>ruoyi-system</module>
+		<module>ruoyi-quartz</module>
+		<module>ruoyi-generator</module>
+        <module>ruoyi-common</module>
+    </modules>
+    <packaging>pom</packaging>
+
 
 	<dependencies>
-
-		<!-- SpringBoot 核心包 -->
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter</artifactId>
-			<!--
-			 <exclusions>
-                <exclusion>
-                    <artifactId>spring-boot-starter-tomcat</artifactId>
-                    <groupId>org.springframework.boot</groupId>
-                </exclusion>
-            </exclusions>
-             -->
-		</dependency>
-
-		<!-- SpringBoot 测试 -->
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-test</artifactId>
-			<scope>test</scope>
-		</dependency>
-
-		<!-- SpringBoot 拦截器 -->
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-aop</artifactId>
-		</dependency>
-
-		<!-- SpringBoot Web容器 -->
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-web</artifactId>
-		</dependency>
-
-		<!-- SpringBoot集成thymeleaf模板 -->
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-thymeleaf</artifactId>
-		</dependency>
-
-		<!-- spring-boot-devtools -->
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-devtools</artifactId>
-			<optional>true</optional> <!-- 表示依赖不会传递 -->
-		</dependency>
-
-		<!-- Mysql驱动包 -->
-		<dependency>
-			<groupId>mysql</groupId>
-			<artifactId>mysql-connector-java</artifactId>
-		</dependency>
-
-		<!-- SpringBoot集成mybatis框架 -->
-		<dependency>
-			<groupId>org.mybatis.spring.boot</groupId>
-			<artifactId>mybatis-spring-boot-starter</artifactId>
-			<version>${mybatis.spring.boot.starter.version}</version>
-		</dependency>
-
-		<!-- pagehelper 分页插件 -->
-		<dependency>
-			<groupId>com.github.pagehelper</groupId>
-			<artifactId>pagehelper-spring-boot-starter</artifactId>
-			<version>${pagehelper.spring.boot.starter.version}</version>
-		</dependency>
-
-		<!--阿里数据库连接池 -->
-		<dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>druid-spring-boot-starter</artifactId>
-            <version>${druid.version}</version>
-        </dependency>
-
-		<!--常用工具类 -->
-		<dependency>
-			<groupId>org.apache.commons</groupId>
-			<artifactId>commons-lang3</artifactId>
-		</dependency>
-
-		<!--io常用工具类 -->
-		<dependency>
-			<groupId>commons-io</groupId>
-			<artifactId>commons-io</artifactId>
-			<version>${commons.io.version}</version>
-		</dependency>
-
-		<!--文件上传工具类 -->
-		<dependency>
-			<groupId>commons-fileupload</groupId>
-			<artifactId>commons-fileupload</artifactId>
-			<version>${commons.fileupload.version}</version>
-		</dependency>
-
-		<!--Shiro核心框架 -->
-		<dependency>
-			<groupId>org.apache.shiro</groupId>
-			<artifactId>shiro-core</artifactId>
-			<version>${shiro.version}</version>
-		</dependency>
-
-		<!-- Shiro使用Srping框架 -->
-		<dependency>
-			<groupId>org.apache.shiro</groupId>
-			<artifactId>shiro-spring</artifactId>
-			<version>${shiro.version}</version>
-		</dependency>
-
-		<!-- Shiro使用EhCache缓存框架 -->
-		<dependency>
-			<groupId>org.apache.shiro</groupId>
-			<artifactId>shiro-ehcache</artifactId>
-			<version>${shiro.version}</version>
-		</dependency>
-
-		<!-- thymeleaf模板引擎和shiro框架的整合 -->
-		<dependency>
-			<groupId>com.github.theborakompanioni</groupId>
-			<artifactId>thymeleaf-extras-shiro</artifactId>
-			<version>${thymeleaf.extras.shiro.version}</version>
-		</dependency>
-
-		<!-- 阿里JSON解析器 -->
-		<dependency>
-			<groupId>com.alibaba</groupId>
-			<artifactId>fastjson</artifactId>
-			<version>${fastjson.version}</version>
-		</dependency>
-
-		<!-- 解析客户端操作系统、浏览器等 -->
-		<dependency>
-			<groupId>eu.bitwalker</groupId>
-			<artifactId>UserAgentUtils</artifactId>
-			<version>${bitwalker.version}</version>
-		</dependency>
-
-		<!--Spring框架基本的核心工具-->
-		<dependency>
-			<groupId>org.springframework</groupId>
-			<artifactId>spring-context-support</artifactId>
-		</dependency>
-
-		<!-- 定时任务 -->
-		<dependency>
-			<groupId>org.quartz-scheduler</groupId>
-			<artifactId>quartz</artifactId>
-			<exclusions>
-				<exclusion>
-					<groupId>com.mchange</groupId>
-					<artifactId>c3p0</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-
-		<!--velocity代码生成使用模板 -->
-		<dependency>
-			<groupId>org.apache.velocity</groupId>
-			<artifactId>velocity</artifactId>
-			<version>${velocity.version}</version>
-		</dependency>
-
-		<!--验证码 -->
-		<dependency>
-			<groupId>com.github.penggle</groupId>
-			<artifactId>kaptcha</artifactId>
-			<version>${kaptcha.version}</version>
-			<exclusions>
-				<exclusion>
-					<artifactId>javax.servlet-api</artifactId>
-					<groupId>javax.servlet</groupId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-
-		<!-- swagger2-->
-		<dependency>
-			<groupId>io.springfox</groupId>
-			<artifactId>springfox-swagger2</artifactId>
-			<version>${swagger.version}</version>
-		</dependency>
-
-		<!-- swagger2-UI-->
-		<dependency>
-			<groupId>io.springfox</groupId>
-			<artifactId>springfox-swagger-ui</artifactId>
-			<version>${swagger.version}</version>
-		</dependency>
-
-		<!-- HTML解析器 -->
-		<dependency>
-			<groupId>org.jsoup</groupId>
-			<artifactId>jsoup</artifactId>
-			<version>${jsoup.version}</version>
+	
+       <dependency>
+		    <groupId>javax.servlet</groupId>
+		    <artifactId>javax.servlet-api</artifactId>
 		</dependency>
 		
-		<!-- excel工具 -->
+		<!-- 日志工具类 -->
 		<dependency>
-			<groupId>org.apache.poi</groupId>
-			<artifactId>poi-ooxml</artifactId>
-			<version>${poi.version}</version>
-		</dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
 
 	</dependencies>
 
 	<build>
-		<finalName>${project.artifactId}</finalName>
-		<plugins>
-			<plugin>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-maven-plugin</artifactId>
-				<configuration>
-					<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                    <encoding>${project.build.sourceEncoding}</encoding>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 
 	<repositories>
 		<repository>
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
new file mode 100644
index 00000000..bc6caf0d
--- /dev/null
+++ b/ruoyi-admin/pom.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ruoyi</artifactId>
+        <groupId>com.ruoyi</groupId>
+        <version>3.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+	
+    <artifactId>ruoyi-admin</artifactId>
+	
+	<description>
+	    web服务入口
+	</description>
+	
+	<properties>
+	    <pagehelper.boot.version>1.2.5</pagehelper.boot.version>
+		<swagger.version>2.7.0</swagger.version>
+	</properties>
+
+    <dependencies>
+        
+		<!-- SpringBoot Web容器 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        
+		<!-- SpringBoot集成thymeleaf模板 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-thymeleaf</artifactId>
+        </dependency>
+        
+        <!-- spring-boot-devtools -->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-devtools</artifactId>
+			<optional>true</optional> <!-- 表示依赖不会传递 -->
+		</dependency>
+        
+        <!-- pagehelper 分页插件 -->
+		<dependency>
+			<groupId>com.github.pagehelper</groupId>
+			<artifactId>pagehelper-spring-boot-starter</artifactId>
+			<version>${pagehelper.boot.version}</version>
+		</dependency>
+
+		<!-- swagger2-->
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger2</artifactId>
+			<version>${swagger.version}</version>
+		</dependency>
+        
+		<!-- 通用工具-->
+		<dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-common</artifactId>
+            <version>${ruoyi.version}</version>
+        </dependency>
+		
+		<!-- 核心模块-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-framework</artifactId>
+            <version>${ruoyi.version}</version>
+        </dependency>
+		
+		<!-- 系统模块-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-system</artifactId>
+            <version>${ruoyi.version}</version>
+        </dependency>
+        
+        <!-- 定时任务-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-quartz</artifactId>
+            <version>${ruoyi.version}</version>
+        </dependency>
+        
+        <!-- 代码生成-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-generator</artifactId>
+            <version>${ruoyi.version}</version>
+        </dependency>
+		
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+					<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
+				</configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+        <finalName>ruoyi-${ruoyi.version}</finalName>
+    </build>
+	
+</project>
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
similarity index 94%
rename from src/main/java/com/ruoyi/RuoYiApplication.java
rename to ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
index 90bf0314..f72741ce 100644
--- a/src/main/java/com/ruoyi/RuoYiApplication.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -11,7 +11,7 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
  * @author ruoyi
  */
 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
-@MapperScan("com.ruoyi.project.*.*.mapper")
+@MapperScan("com.ruoyi.*.mapper")
 public class RuoYiApplication
 {
     public static void main(String[] args)
diff --git a/src/main/java/com/ruoyi/RuoYiServletInitializer.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
similarity index 100%
rename from src/main/java/com/ruoyi/RuoYiServletInitializer.java
rename to ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
diff --git a/src/main/java/com/ruoyi/project/common/CommonController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
similarity index 90%
rename from src/main/java/com/ruoyi/project/common/CommonController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
index 8266563f..61c98d29 100644
--- a/src/main/java/com/ruoyi/project/common/CommonController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.common;
+package com.ruoyi.web.controller.common;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
@@ -8,8 +8,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
+import com.ruoyi.common.config.Global;
 import com.ruoyi.common.utils.file.FileUtils;
-import com.ruoyi.framework.config.RuoYiConfig;
 
 /**
  * 通用请求处理
@@ -27,7 +27,7 @@ public class CommonController
         String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
         try
         {
-            String filePath = RuoYiConfig.getDownloadPath() + fileName;
+            String filePath = Global.getDownloadPath() + fileName;
 
             response.setCharacterEncoding("utf-8");
             response.setContentType("multipart/form-data");
diff --git a/src/main/java/com/ruoyi/project/monitor/druid/DruidController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/DruidController.java
similarity index 82%
rename from src/main/java/com/ruoyi/project/monitor/druid/DruidController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/DruidController.java
index dbbc6dec..93ae7822 100644
--- a/src/main/java/com/ruoyi/project/monitor/druid/DruidController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/DruidController.java
@@ -1,10 +1,10 @@
-package com.ruoyi.project.monitor.druid;
+package com.ruoyi.web.controller.monitor;
 
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
-import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * druid 监控
diff --git a/src/main/java/com/ruoyi/project/monitor/job/controller/JobController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/JobController.java
similarity index 73%
rename from src/main/java/com/ruoyi/project/monitor/job/controller/JobController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/JobController.java
index c166916b..ad527c59 100644
--- a/src/main/java/com/ruoyi/project/monitor/job/controller/JobController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/JobController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.monitor.job.controller;
+package com.ruoyi.web.controller.monitor;
 
 import java.util.List;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -10,14 +10,15 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.base.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.ExcelUtil;
+import com.ruoyi.framework.util.ShiroUtils;
 import com.ruoyi.framework.web.page.TableDataInfo;
-import com.ruoyi.project.monitor.job.domain.Job;
-import com.ruoyi.project.monitor.job.service.IJobService;
+import com.ruoyi.quartz.domain.SysJob;
+import com.ruoyi.quartz.service.ISysJobService;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 调度任务信息操作处理
@@ -31,7 +32,7 @@ public class JobController extends BaseController
     private String prefix = "monitor/job";
 
     @Autowired
-    private IJobService jobService;
+    private ISysJobService jobService;
 
     @RequiresPermissions("monitor:job:view")
     @GetMapping()
@@ -43,10 +44,10 @@ public class JobController extends BaseController
     @RequiresPermissions("monitor:job:list")
     @PostMapping("/list")
     @ResponseBody
-    public TableDataInfo list(Job job)
+    public TableDataInfo list(SysJob job)
     {
         startPage();
-        List<Job> list = jobService.selectJobList(job);
+        List<SysJob> list = jobService.selectJobList(job);
         return getDataTable(list);
     }
 
@@ -54,10 +55,10 @@ public class JobController extends BaseController
     @RequiresPermissions("monitor:job:export")
     @PostMapping("/export")
     @ResponseBody
-    public AjaxResult export(Job job)
+    public AjaxResult export(SysJob job)
     {
-        List<Job> list = jobService.selectJobList(job);
-        ExcelUtil<Job> util = new ExcelUtil<Job>(Job.class);
+        List<SysJob> list = jobService.selectJobList(job);
+        ExcelUtil<SysJob> util = new ExcelUtil<SysJob>(SysJob.class);
         return util.exportExcel(list, "job");
     }
 
@@ -86,8 +87,9 @@ public class JobController extends BaseController
     @RequiresPermissions("monitor:job:changeStatus")
     @PostMapping("/changeStatus")
     @ResponseBody
-    public AjaxResult changeStatus(Job job)
+    public AjaxResult changeStatus(SysJob job)
     {
+        job.setUpdateBy(ShiroUtils.getLoginName());
         return toAjax(jobService.changeStatus(job));
     }
 
@@ -98,7 +100,7 @@ public class JobController extends BaseController
     @RequiresPermissions("monitor:job:changeStatus")
     @PostMapping("/run")
     @ResponseBody
-    public AjaxResult run(Job job)
+    public AjaxResult run(SysJob job)
     {
         return toAjax(jobService.run(job));
     }
@@ -119,8 +121,9 @@ public class JobController extends BaseController
     @RequiresPermissions("monitor:job:add")
     @PostMapping("/add")
     @ResponseBody
-    public AjaxResult addSave(Job job)
+    public AjaxResult addSave(SysJob job)
     {
+        job.setCreateBy(ShiroUtils.getLoginName());
         return toAjax(jobService.insertJobCron(job));
     }
 
@@ -141,8 +144,9 @@ public class JobController extends BaseController
     @RequiresPermissions("monitor:job:edit")
     @PostMapping("/edit")
     @ResponseBody
-    public AjaxResult editSave(Job job)
+    public AjaxResult editSave(SysJob job)
     {
+        job.setUpdateBy(ShiroUtils.getLoginName());
         return toAjax(jobService.updateJobCron(job));
     }
 }
diff --git a/src/main/java/com/ruoyi/project/monitor/job/controller/JobLogController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/JobLogController.java
similarity index 67%
rename from src/main/java/com/ruoyi/project/monitor/job/controller/JobLogController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/JobLogController.java
index 9f0ea54b..106413a0 100644
--- a/src/main/java/com/ruoyi/project/monitor/job/controller/JobLogController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/JobLogController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.monitor.job.controller;
+package com.ruoyi.web.controller.monitor;
 
 import java.util.List;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -8,14 +8,14 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.base.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.ExcelUtil;
 import com.ruoyi.framework.web.page.TableDataInfo;
-import com.ruoyi.project.monitor.job.domain.JobLog;
-import com.ruoyi.project.monitor.job.service.IJobLogService;
+import com.ruoyi.quartz.domain.SysJobLog;
+import com.ruoyi.quartz.service.ISysJobLogService;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 调度日志操作处理
@@ -29,7 +29,7 @@ public class JobLogController extends BaseController
     private String prefix = "monitor/job";
 
     @Autowired
-    private IJobLogService jobLogService;
+    private ISysJobLogService jobLogService;
 
     @RequiresPermissions("monitor:job:view")
     @GetMapping()
@@ -41,10 +41,10 @@ public class JobLogController extends BaseController
     @RequiresPermissions("monitor:job:list")
     @PostMapping("/list")
     @ResponseBody
-    public TableDataInfo list(JobLog jobLog)
+    public TableDataInfo list(SysJobLog jobLog)
     {
         startPage();
-        List<JobLog> list = jobLogService.selectJobLogList(jobLog);
+        List<SysJobLog> list = jobLogService.selectJobLogList(jobLog);
         return getDataTable(list);
     }
 
@@ -52,10 +52,10 @@ public class JobLogController extends BaseController
     @RequiresPermissions("monitor:job:export")
     @PostMapping("/export")
     @ResponseBody
-    public AjaxResult export(JobLog jobLog)
+    public AjaxResult export(SysJobLog jobLog)
     {
-        List<JobLog> list = jobLogService.selectJobLogList(jobLog);
-        ExcelUtil<JobLog> util = new ExcelUtil<JobLog>(JobLog.class);
+        List<SysJobLog> list = jobLogService.selectJobLogList(jobLog);
+        ExcelUtil<SysJobLog> util = new ExcelUtil<SysJobLog>(SysJobLog.class);
         return util.exportExcel(list, "jobLog");
     }
 
diff --git a/src/main/java/com/ruoyi/project/monitor/logininfor/controller/LogininforController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/LogininforController.java
similarity index 66%
rename from src/main/java/com/ruoyi/project/monitor/logininfor/controller/LogininforController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/LogininforController.java
index 10c03c9c..d31a68f3 100644
--- a/src/main/java/com/ruoyi/project/monitor/logininfor/controller/LogininforController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/LogininforController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.monitor.logininfor.controller;
+package com.ruoyi.web.controller.monitor;
 
 import java.util.List;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -8,14 +8,14 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.base.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.ExcelUtil;
 import com.ruoyi.framework.web.page.TableDataInfo;
-import com.ruoyi.project.monitor.logininfor.domain.Logininfor;
-import com.ruoyi.project.monitor.logininfor.service.ILogininforService;
+import com.ruoyi.system.domain.SysLogininfor;
+import com.ruoyi.system.service.ISysLogininforService;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 系统访问记录
@@ -29,7 +29,7 @@ public class LogininforController extends BaseController
     private String prefix = "monitor/logininfor";
 
     @Autowired
-    private ILogininforService logininforService;
+    private ISysLogininforService logininforService;
 
     @RequiresPermissions("monitor:logininfor:view")
     @GetMapping()
@@ -41,10 +41,10 @@ public class LogininforController extends BaseController
     @RequiresPermissions("monitor:logininfor:list")
     @PostMapping("/list")
     @ResponseBody
-    public TableDataInfo list(Logininfor logininfor)
+    public TableDataInfo list(SysLogininfor logininfor)
     {
         startPage();
-        List<Logininfor> list = logininforService.selectLogininforList(logininfor);
+        List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
         return getDataTable(list);
     }
 
@@ -52,10 +52,10 @@ public class LogininforController extends BaseController
     @RequiresPermissions("monitor:logininfor:export")
     @PostMapping("/export")
     @ResponseBody
-    public AjaxResult export(Logininfor logininfor)
+    public AjaxResult export(SysLogininfor logininfor)
     {
-        List<Logininfor> list = logininforService.selectLogininforList(logininfor);
-        ExcelUtil<Logininfor> util = new ExcelUtil<Logininfor>(Logininfor.class);
+        List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
+        ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class);
         return util.exportExcel(list, "logininfor");
     }
 
diff --git a/src/main/java/com/ruoyi/project/monitor/operlog/controller/OperlogController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/OperlogController.java
similarity index 70%
rename from src/main/java/com/ruoyi/project/monitor/operlog/controller/OperlogController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/OperlogController.java
index 1294db42..62b91f61 100644
--- a/src/main/java/com/ruoyi/project/monitor/operlog/controller/OperlogController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/OperlogController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.monitor.operlog.controller;
+package com.ruoyi.web.controller.monitor;
 
 import java.util.List;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -10,14 +10,14 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.base.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.ExcelUtil;
 import com.ruoyi.framework.web.page.TableDataInfo;
-import com.ruoyi.project.monitor.operlog.domain.OperLog;
-import com.ruoyi.project.monitor.operlog.service.IOperLogService;
+import com.ruoyi.system.domain.SysOperLog;
+import com.ruoyi.system.service.ISysOperLogService;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 操作日志记录
@@ -31,7 +31,7 @@ public class OperlogController extends BaseController
     private String prefix = "monitor/operlog";
 
     @Autowired
-    private IOperLogService operLogService;
+    private ISysOperLogService operLogService;
 
     @RequiresPermissions("monitor:operlog:view")
     @GetMapping()
@@ -43,10 +43,10 @@ public class OperlogController extends BaseController
     @RequiresPermissions("monitor:operlog:list")
     @PostMapping("/list")
     @ResponseBody
-    public TableDataInfo list(OperLog operLog)
+    public TableDataInfo list(SysOperLog operLog)
     {
         startPage();
-        List<OperLog> list = operLogService.selectOperLogList(operLog);
+        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
         return getDataTable(list);
     }
 
@@ -54,10 +54,10 @@ public class OperlogController extends BaseController
     @RequiresPermissions("monitor:operlog:export")
     @PostMapping("/export")
     @ResponseBody
-    public AjaxResult export(OperLog operLog)
+    public AjaxResult export(SysOperLog operLog)
     {
-        List<OperLog> list = operLogService.selectOperLogList(operLog);
-        ExcelUtil<OperLog> util = new ExcelUtil<OperLog>(OperLog.class);
+        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
+        ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class);
         return util.exportExcel(list, "operLog");
     }
 
diff --git a/src/main/java/com/ruoyi/project/monitor/online/controller/UserOnlineController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/UserOnlineController.java
similarity index 69%
rename from src/main/java/com/ruoyi/project/monitor/online/controller/UserOnlineController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/UserOnlineController.java
index c88f3db1..06938823 100644
--- a/src/main/java/com/ruoyi/project/monitor/online/controller/UserOnlineController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/UserOnlineController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.monitor.online.controller;
+package com.ruoyi.web.controller.monitor;
 
 import java.util.List;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -9,16 +9,17 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
-import com.ruoyi.common.utils.security.ShiroUtils;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.base.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.enums.OnlineStatus;
+import com.ruoyi.framework.shiro.session.OnlineSession;
 import com.ruoyi.framework.shiro.session.OnlineSessionDAO;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.framework.util.ShiroUtils;
 import com.ruoyi.framework.web.page.TableDataInfo;
-import com.ruoyi.project.monitor.online.domain.OnlineSession;
-import com.ruoyi.project.monitor.online.domain.UserOnline;
-import com.ruoyi.project.monitor.online.service.IUserOnlineService;
+import com.ruoyi.system.domain.SysUserOnline;
+import com.ruoyi.system.service.impl.SysUserOnlineServiceImpl;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 在线用户监控
@@ -32,7 +33,7 @@ public class UserOnlineController extends BaseController
     private String prefix = "monitor/online";
 
     @Autowired
-    private IUserOnlineService userOnlineService;
+    private SysUserOnlineServiceImpl userOnlineService;
 
     @Autowired
     private OnlineSessionDAO onlineSessionDAO;
@@ -47,10 +48,10 @@ public class UserOnlineController extends BaseController
     @RequiresPermissions("monitor:online:list")
     @PostMapping("/list")
     @ResponseBody
-    public TableDataInfo list(UserOnline userOnline)
+    public TableDataInfo list(SysUserOnline userOnline)
     {
         startPage();
-        List<UserOnline> list = userOnlineService.selectUserOnlineList(userOnline);
+        List<SysUserOnline> list = userOnlineService.selectUserOnlineList(userOnline);
         return getDataTable(list);
     }
 
@@ -62,7 +63,7 @@ public class UserOnlineController extends BaseController
     {
         for (String sessionId : ids)
         {
-            UserOnline online = userOnlineService.selectOnlineById(sessionId);
+            SysUserOnline online = userOnlineService.selectOnlineById(sessionId);
             if (online == null)
             {
                 return error("用户已下线");
@@ -76,8 +77,8 @@ public class UserOnlineController extends BaseController
             {
                 return error("当前登陆用户无法强退");
             }
-            onlineSession.setStatus(OnlineSession.OnlineStatus.off_line);
-            online.setStatus(OnlineSession.OnlineStatus.off_line);
+            onlineSession.setStatus(OnlineStatus.off_line);
+            online.setStatus(OnlineStatus.off_line);
             userOnlineService.saveOnline(online);
         }
         return success();
@@ -89,7 +90,7 @@ public class UserOnlineController extends BaseController
     @ResponseBody
     public AjaxResult forceLogout(String sessionId)
     {
-        UserOnline online = userOnlineService.selectOnlineById(sessionId);
+        SysUserOnline online = userOnlineService.selectOnlineById(sessionId);
         if (sessionId.equals(ShiroUtils.getSessionId()))
         {
             return error("当前登陆用户无法强退");
@@ -103,8 +104,8 @@ public class UserOnlineController extends BaseController
         {
             return error("用户已下线");
         }
-        onlineSession.setStatus(OnlineSession.OnlineStatus.off_line);
-        online.setStatus(OnlineSession.OnlineStatus.off_line);
+        onlineSession.setStatus(OnlineStatus.off_line);
+        online.setStatus(OnlineStatus.off_line);
         userOnlineService.saveOnline(online);
         return success();
     }
diff --git a/src/main/java/com/ruoyi/project/system/user/controller/CaptchaController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/CaptchaController.java
similarity index 93%
rename from src/main/java/com/ruoyi/project/system/user/controller/CaptchaController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/CaptchaController.java
index 6555a436..fca2a5ae 100644
--- a/src/main/java/com/ruoyi/project/system/user/controller/CaptchaController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/CaptchaController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.user.controller;
+package com.ruoyi.web.controller.system;
 
 import java.awt.image.BufferedImage;
 import java.io.IOException;
@@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.servlet.ModelAndView;
 import com.google.code.kaptcha.Constants;
 import com.google.code.kaptcha.Producer;
-import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 图片验证码(支持算术形式)
diff --git a/src/main/java/com/ruoyi/project/system/config/controller/ConfigController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/ConfigController.java
similarity index 71%
rename from src/main/java/com/ruoyi/project/system/config/controller/ConfigController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/ConfigController.java
index a4db07db..8b4d2b29 100644
--- a/src/main/java/com/ruoyi/project/system/config/controller/ConfigController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/ConfigController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.config.controller;
+package com.ruoyi.web.controller.system;
 
 import java.util.List;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -10,14 +10,15 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.base.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.ExcelUtil;
+import com.ruoyi.framework.util.ShiroUtils;
 import com.ruoyi.framework.web.page.TableDataInfo;
-import com.ruoyi.project.system.config.domain.Config;
-import com.ruoyi.project.system.config.service.IConfigService;
+import com.ruoyi.system.domain.SysConfig;
+import com.ruoyi.system.service.ISysConfigService;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 参数配置 信息操作处理
@@ -31,7 +32,7 @@ public class ConfigController extends BaseController
     private String prefix = "system/config";
 
     @Autowired
-    private IConfigService configService;
+    private ISysConfigService configService;
 
     @RequiresPermissions("system:config:view")
     @GetMapping()
@@ -46,10 +47,10 @@ public class ConfigController extends BaseController
     @RequiresPermissions("system:config:list")
     @PostMapping("/list")
     @ResponseBody
-    public TableDataInfo list(Config config)
+    public TableDataInfo list(SysConfig config)
     {
         startPage();
-        List<Config> list = configService.selectConfigList(config);
+        List<SysConfig> list = configService.selectConfigList(config);
         return getDataTable(list);
     }
 
@@ -57,10 +58,10 @@ public class ConfigController extends BaseController
     @RequiresPermissions("system:config:export")
     @PostMapping("/export")
     @ResponseBody
-    public AjaxResult export(Config config)
+    public AjaxResult export(SysConfig config)
     {
-        List<Config> list = configService.selectConfigList(config);
-        ExcelUtil<Config> util = new ExcelUtil<Config>(Config.class);
+        List<SysConfig> list = configService.selectConfigList(config);
+        ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class);
         return util.exportExcel(list, "config");
     }
 
@@ -80,8 +81,9 @@ public class ConfigController extends BaseController
     @Log(title = "参数管理", businessType = BusinessType.INSERT)
     @PostMapping("/add")
     @ResponseBody
-    public AjaxResult addSave(Config config)
+    public AjaxResult addSave(SysConfig config)
     {
+        config.setCreateBy(ShiroUtils.getLoginName());
         return toAjax(configService.insertConfig(config));
     }
 
@@ -102,8 +104,9 @@ public class ConfigController extends BaseController
     @Log(title = "参数管理", businessType = BusinessType.UPDATE)
     @PostMapping("/edit")
     @ResponseBody
-    public AjaxResult editSave(Config config)
+    public AjaxResult editSave(SysConfig config)
     {
+        config.setUpdateBy(ShiroUtils.getLoginName());
         return toAjax(configService.updateConfig(config));
     }
 
@@ -124,7 +127,7 @@ public class ConfigController extends BaseController
      */
     @PostMapping("/checkConfigKeyUnique")
     @ResponseBody
-    public String checkConfigKeyUnique(Config config)
+    public String checkConfigKeyUnique(SysConfig config)
     {
         return configService.checkConfigKeyUnique(config);
     }
diff --git a/src/main/java/com/ruoyi/project/system/dept/controller/DeptController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/DeptController.java
similarity index 78%
rename from src/main/java/com/ruoyi/project/system/dept/controller/DeptController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/DeptController.java
index 54c99ddd..f6739938 100644
--- a/src/main/java/com/ruoyi/project/system/dept/controller/DeptController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/DeptController.java
@@ -1,8 +1,7 @@
-package com.ruoyi.project.system.dept.controller;
+package com.ruoyi.web.controller.system;
 
 import java.util.List;
 import java.util.Map;
-
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -12,14 +11,14 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
-
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.project.system.dept.domain.Dept;
-import com.ruoyi.project.system.dept.service.IDeptService;
-import com.ruoyi.project.system.role.domain.Role;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.base.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.framework.util.ShiroUtils;
+import com.ruoyi.system.domain.SysDept;
+import com.ruoyi.system.domain.SysRole;
+import com.ruoyi.system.service.ISysDeptService;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 部门信息
@@ -33,7 +32,7 @@ public class DeptController extends BaseController
     private String prefix = "system/dept";
 
     @Autowired
-    private IDeptService deptService;
+    private ISysDeptService deptService;
 
     @RequiresPermissions("system:dept:view")
     @GetMapping()
@@ -45,9 +44,9 @@ public class DeptController extends BaseController
     @RequiresPermissions("system:dept:list")
     @GetMapping("/list")
     @ResponseBody
-    public List<Dept> list(Dept dept)
+    public List<SysDept> list(SysDept dept)
     {
-        List<Dept> deptList = deptService.selectDeptList(dept);
+        List<SysDept> deptList = deptService.selectDeptList(dept);
         return deptList;
     }
 
@@ -68,8 +67,9 @@ public class DeptController extends BaseController
     @RequiresPermissions("system:dept:add")
     @PostMapping("/add")
     @ResponseBody
-    public AjaxResult addSave(Dept dept)
+    public AjaxResult addSave(SysDept dept)
     {
+        dept.setCreateBy(ShiroUtils.getLoginName());
         return toAjax(deptService.insertDept(dept));
     }
 
@@ -90,8 +90,9 @@ public class DeptController extends BaseController
     @RequiresPermissions("system:dept:edit")
     @PostMapping("/edit")
     @ResponseBody
-    public AjaxResult editSave(Dept dept)
+    public AjaxResult editSave(SysDept dept)
     {
+        dept.setUpdateBy(ShiroUtils.getLoginName());
         return toAjax(deptService.updateDept(dept));
     }
 
@@ -120,7 +121,7 @@ public class DeptController extends BaseController
      */
     @PostMapping("/checkDeptNameUnique")
     @ResponseBody
-    public String checkDeptNameUnique(Dept dept)
+    public String checkDeptNameUnique(SysDept dept)
     {
         return deptService.checkDeptNameUnique(dept);
     }
@@ -151,7 +152,7 @@ public class DeptController extends BaseController
      */
     @GetMapping("/roleDeptTreeData")
     @ResponseBody
-    public List<Map<String, Object>> deptTreeData(Role role)
+    public List<Map<String, Object>> deptTreeData(SysRole role)
     {
         List<Map<String, Object>> tree = deptService.roleDeptTreeData(role);
         return tree;
diff --git a/src/main/java/com/ruoyi/project/system/dict/controller/DictDataController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/DictDataController.java
similarity index 70%
rename from src/main/java/com/ruoyi/project/system/dict/controller/DictDataController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/DictDataController.java
index 03ba1de6..b9097503 100644
--- a/src/main/java/com/ruoyi/project/system/dict/controller/DictDataController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/DictDataController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.dict.controller;
+package com.ruoyi.web.controller.system;
 
 import java.util.List;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -10,14 +10,15 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.base.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.ExcelUtil;
+import com.ruoyi.framework.util.ShiroUtils;
 import com.ruoyi.framework.web.page.TableDataInfo;
-import com.ruoyi.project.system.dict.domain.DictData;
-import com.ruoyi.project.system.dict.service.IDictDataService;
+import com.ruoyi.system.domain.SysDictData;
+import com.ruoyi.system.service.ISysDictDataService;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 数据字典信息
@@ -31,7 +32,7 @@ public class DictDataController extends BaseController
     private String prefix = "system/dict/data";
 
     @Autowired
-    private IDictDataService dictDataService;
+    private ISysDictDataService dictDataService;
 
     @RequiresPermissions("system:dict:view")
     @GetMapping()
@@ -43,10 +44,10 @@ public class DictDataController extends BaseController
     @PostMapping("/list")
     @RequiresPermissions("system:dict:list")
     @ResponseBody
-    public TableDataInfo list(DictData dictData)
+    public TableDataInfo list(SysDictData dictData)
     {
         startPage();
-        List<DictData> list = dictDataService.selectDictDataList(dictData);
+        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
         return getDataTable(list);
     }
 
@@ -54,10 +55,10 @@ public class DictDataController extends BaseController
     @RequiresPermissions("system:dict:export")
     @PostMapping("/export")
     @ResponseBody
-    public AjaxResult export(DictData dictData)
+    public AjaxResult export(SysDictData dictData)
     {
-        List<DictData> list = dictDataService.selectDictDataList(dictData);
-        ExcelUtil<DictData> util = new ExcelUtil<DictData>(DictData.class);
+        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
+        ExcelUtil<SysDictData> util = new ExcelUtil<SysDictData>(SysDictData.class);
         return util.exportExcel(list, "dictData");
     }
 
@@ -78,8 +79,9 @@ public class DictDataController extends BaseController
     @RequiresPermissions("system:dict:add")
     @PostMapping("/add")
     @ResponseBody
-    public AjaxResult addSave(DictData dict)
+    public AjaxResult addSave(SysDictData dict)
     {
+        dict.setCreateBy(ShiroUtils.getLoginName());
         return toAjax(dictDataService.insertDictData(dict));
     }
 
@@ -100,8 +102,9 @@ public class DictDataController extends BaseController
     @RequiresPermissions("system:dict:edit")
     @PostMapping("/edit")
     @ResponseBody
-    public AjaxResult editSave(DictData dict)
+    public AjaxResult editSave(SysDictData dict)
     {
+        dict.setUpdateBy(ShiroUtils.getLoginName());
         return toAjax(dictDataService.updateDictData(dict));
     }
 
diff --git a/src/main/java/com/ruoyi/project/system/dict/controller/DictTypeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/DictTypeController.java
similarity index 73%
rename from src/main/java/com/ruoyi/project/system/dict/controller/DictTypeController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/DictTypeController.java
index 0abceee9..1ffc1fc8 100644
--- a/src/main/java/com/ruoyi/project/system/dict/controller/DictTypeController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/DictTypeController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.dict.controller;
+package com.ruoyi.web.controller.system;
 
 import java.util.List;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -10,14 +10,15 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.base.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.ExcelUtil;
+import com.ruoyi.framework.util.ShiroUtils;
 import com.ruoyi.framework.web.page.TableDataInfo;
-import com.ruoyi.project.system.dict.domain.DictType;
-import com.ruoyi.project.system.dict.service.IDictTypeService;
+import com.ruoyi.system.domain.SysDictType;
+import com.ruoyi.system.service.ISysDictTypeService;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 数据字典信息
@@ -31,7 +32,7 @@ public class DictTypeController extends BaseController
     private String prefix = "system/dict/type";
 
     @Autowired
-    private IDictTypeService dictTypeService;
+    private ISysDictTypeService dictTypeService;
 
     @RequiresPermissions("system:dict:view")
     @GetMapping()
@@ -43,10 +44,10 @@ public class DictTypeController extends BaseController
     @PostMapping("/list")
     @RequiresPermissions("system:dict:list")
     @ResponseBody
-    public TableDataInfo list(DictType dictType)
+    public TableDataInfo list(SysDictType dictType)
     {
         startPage();
-        List<DictType> list = dictTypeService.selectDictTypeList(dictType);
+        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
         return getDataTable(list);
     }
 
@@ -54,11 +55,11 @@ public class DictTypeController extends BaseController
     @RequiresPermissions("system:dict:export")
     @PostMapping("/export")
     @ResponseBody
-    public AjaxResult export(DictType dictType)
+    public AjaxResult export(SysDictType dictType)
     {
 
-        List<DictType> list = dictTypeService.selectDictTypeList(dictType);
-        ExcelUtil<DictType> util = new ExcelUtil<DictType>(DictType.class);
+        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
+        ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class);
         return util.exportExcel(list, "dictType");
     }
 
@@ -78,8 +79,9 @@ public class DictTypeController extends BaseController
     @RequiresPermissions("system:dict:add")
     @PostMapping("/add")
     @ResponseBody
-    public AjaxResult addSave(DictType dict)
+    public AjaxResult addSave(SysDictType dict)
     {
+        dict.setCreateBy(ShiroUtils.getLoginName());
         return toAjax(dictTypeService.insertDictType(dict));
     }
 
@@ -100,8 +102,9 @@ public class DictTypeController extends BaseController
     @RequiresPermissions("system:dict:edit")
     @PostMapping("/edit")
     @ResponseBody
-    public AjaxResult editSave(DictType dict)
+    public AjaxResult editSave(SysDictType dict)
     {
+        dict.setUpdateBy(ShiroUtils.getLoginName());
         return toAjax(dictTypeService.updateDictType(dict));
     }
 
@@ -138,7 +141,7 @@ public class DictTypeController extends BaseController
      */
     @PostMapping("/checkDictTypeUnique")
     @ResponseBody
-    public String checkDictTypeUnique(DictType dictType)
+    public String checkDictTypeUnique(SysDictType dictType)
     {
         return dictTypeService.checkDictTypeUnique(dictType);
     }
diff --git a/src/main/java/com/ruoyi/project/system/user/controller/IndexController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/IndexController.java
similarity index 53%
rename from src/main/java/com/ruoyi/project/system/user/controller/IndexController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/IndexController.java
index 35999895..982d6e1f 100644
--- a/src/main/java/com/ruoyi/project/system/user/controller/IndexController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/IndexController.java
@@ -1,15 +1,15 @@
-package com.ruoyi.project.system.user.controller;
+package com.ruoyi.web.controller.system;
 
 import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.GetMapping;
-import com.ruoyi.framework.config.RuoYiConfig;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.project.system.menu.domain.Menu;
-import com.ruoyi.project.system.menu.service.IMenuService;
-import com.ruoyi.project.system.user.domain.User;
+import com.ruoyi.common.config.Global;
+import com.ruoyi.system.domain.SysMenu;
+import com.ruoyi.system.domain.SysUser;
+import com.ruoyi.system.service.ISysMenuService;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 首页 业务处理
@@ -20,22 +20,19 @@ import com.ruoyi.project.system.user.domain.User;
 public class IndexController extends BaseController
 {
     @Autowired
-    private IMenuService menuService;
-
-    @Autowired
-    private RuoYiConfig ruoYiConfig;
+    private ISysMenuService menuService;
 
     // 系统首页
     @GetMapping("/index")
     public String index(ModelMap mmap)
     {
         // 取身份信息
-        User user = getUser();
+        SysUser user = getUser();
         // 根据用户id取出菜单
-        List<Menu> menus = menuService.selectMenusByUser(user);
+        List<SysMenu> menus = menuService.selectMenusByUser(user);
         mmap.put("menus", menus);
         mmap.put("user", user);
-        mmap.put("copyrightYear", ruoYiConfig.getCopyrightYear());
+        mmap.put("copyrightYear", Global.getCopyrightYear());
         return "index";
     }
 
@@ -43,7 +40,7 @@ public class IndexController extends BaseController
     @GetMapping("/system/main")
     public String main(ModelMap mmap)
     {
-        mmap.put("version", ruoYiConfig.getVersion());
+        mmap.put("version", Global.getVersion());
         return "main";
     }
 }
diff --git a/src/main/java/com/ruoyi/project/system/user/controller/LoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/LoginController.java
similarity index 87%
rename from src/main/java/com/ruoyi/project/system/user/controller/LoginController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/LoginController.java
index 4667d574..5161a5ee 100644
--- a/src/main/java/com/ruoyi/project/system/user/controller/LoginController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/LoginController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.user.controller;
+package com.ruoyi.web.controller.system;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -10,10 +10,10 @@ import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
-import com.ruoyi.common.utils.ServletUtils;
+import com.ruoyi.common.base.AjaxResult;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.framework.util.ServletUtils;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 登录验证
diff --git a/src/main/java/com/ruoyi/project/system/menu/controller/MenuController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/MenuController.java
similarity index 74%
rename from src/main/java/com/ruoyi/project/system/menu/controller/MenuController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/MenuController.java
index e512141b..e952ec3a 100644
--- a/src/main/java/com/ruoyi/project/system/menu/controller/MenuController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/MenuController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.menu.controller;
+package com.ruoyi.web.controller.system;
 
 import java.util.List;
 import java.util.Map;
@@ -11,13 +11,14 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.project.system.menu.domain.Menu;
-import com.ruoyi.project.system.menu.service.IMenuService;
-import com.ruoyi.project.system.role.domain.Role;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.base.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.framework.util.ShiroUtils;
+import com.ruoyi.system.domain.SysMenu;
+import com.ruoyi.system.domain.SysRole;
+import com.ruoyi.system.service.ISysMenuService;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 菜单信息
@@ -31,7 +32,7 @@ public class MenuController extends BaseController
     private String prefix = "system/menu";
 
     @Autowired
-    private IMenuService menuService;
+    private ISysMenuService menuService;
 
     @RequiresPermissions("system:menu:view")
     @GetMapping()
@@ -43,9 +44,9 @@ public class MenuController extends BaseController
     @RequiresPermissions("system:menu:list")
     @GetMapping("/list")
     @ResponseBody
-    public List<Menu> list(Menu menu)
+    public List<SysMenu> list(SysMenu menu)
     {
-        List<Menu> menuList = menuService.selectMenuList(menu);
+        List<SysMenu> menuList = menuService.selectMenuList(menu);
         return menuList;
     }
 
@@ -66,6 +67,7 @@ public class MenuController extends BaseController
         {
             return error(1, "菜单已分配,不允许删除");
         }
+        ShiroUtils.clearCachedAuthorizationInfo();
         return toAjax(menuService.deleteMenuById(menuId));
     }
 
@@ -75,14 +77,14 @@ public class MenuController extends BaseController
     @GetMapping("/add/{parentId}")
     public String add(@PathVariable("parentId") Long parentId, ModelMap mmap)
     {
-        Menu menu = null;
+        SysMenu menu = null;
         if (0L != parentId)
         {
             menu = menuService.selectMenuById(parentId);
         }
         else
         {
-            menu = new Menu();
+            menu = new SysMenu();
             menu.setMenuId(0L);
             menu.setMenuName("主目录");
         }
@@ -97,8 +99,10 @@ public class MenuController extends BaseController
     @RequiresPermissions("system:menu:add")
     @PostMapping("/add")
     @ResponseBody
-    public AjaxResult addSave(Menu menu)
+    public AjaxResult addSave(SysMenu menu)
     {
+        menu.setCreateBy(ShiroUtils.getLoginName());
+        ShiroUtils.clearCachedAuthorizationInfo();
         return toAjax(menuService.insertMenu(menu));
     }
 
@@ -119,8 +123,10 @@ public class MenuController extends BaseController
     @RequiresPermissions("system:menu:edit")
     @PostMapping("/edit")
     @ResponseBody
-    public AjaxResult editSave(Menu menu)
+    public AjaxResult editSave(SysMenu menu)
     {
+        menu.setUpdateBy(ShiroUtils.getLoginName());
+        ShiroUtils.clearCachedAuthorizationInfo();
         return toAjax(menuService.updateMenu(menu));
     }
 
@@ -138,7 +144,7 @@ public class MenuController extends BaseController
      */
     @PostMapping("/checkMenuNameUnique")
     @ResponseBody
-    public String checkMenuNameUnique(Menu menu)
+    public String checkMenuNameUnique(SysMenu menu)
     {
         return menuService.checkMenuNameUnique(menu);
     }
@@ -148,7 +154,7 @@ public class MenuController extends BaseController
      */
     @GetMapping("/roleMenuTreeData")
     @ResponseBody
-    public List<Map<String, Object>> roleMenuTreeData(Role role)
+    public List<Map<String, Object>> roleMenuTreeData(SysRole role)
     {
         List<Map<String, Object>> tree = menuService.roleMenuTreeData(role);
         return tree;
@@ -159,7 +165,7 @@ public class MenuController extends BaseController
      */
     @GetMapping("/menuTreeData")
     @ResponseBody
-    public List<Map<String, Object>> menuTreeData(Role role)
+    public List<Map<String, Object>> menuTreeData(SysRole role)
     {
         List<Map<String, Object>> tree = menuService.menuTreeData();
         return tree;
diff --git a/src/main/java/com/ruoyi/project/system/notice/controller/NoticeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/NoticeController.java
similarity index 74%
rename from src/main/java/com/ruoyi/project/system/notice/controller/NoticeController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/NoticeController.java
index 574bcc23..070d94bf 100644
--- a/src/main/java/com/ruoyi/project/system/notice/controller/NoticeController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/NoticeController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.notice.controller;
+package com.ruoyi.web.controller.system;
 
 import java.util.List;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -10,13 +10,14 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.base.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.framework.util.ShiroUtils;
 import com.ruoyi.framework.web.page.TableDataInfo;
-import com.ruoyi.project.system.notice.domain.Notice;
-import com.ruoyi.project.system.notice.service.INoticeService;
+import com.ruoyi.system.domain.SysNotice;
+import com.ruoyi.system.service.ISysNoticeService;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 公告 信息操作处理
@@ -30,7 +31,7 @@ public class NoticeController extends BaseController
     private String prefix = "system/notice";
 
     @Autowired
-    private INoticeService noticeService;
+    private ISysNoticeService noticeService;
 
     @RequiresPermissions("system:notice:view")
     @GetMapping()
@@ -45,10 +46,10 @@ public class NoticeController extends BaseController
     @RequiresPermissions("system:notice:list")
     @PostMapping("/list")
     @ResponseBody
-    public TableDataInfo list(Notice notice)
+    public TableDataInfo list(SysNotice notice)
     {
         startPage();
-        List<Notice> list = noticeService.selectNoticeList(notice);
+        List<SysNotice> list = noticeService.selectNoticeList(notice);
         return getDataTable(list);
     }
 
@@ -68,8 +69,9 @@ public class NoticeController extends BaseController
     @Log(title = "通知公告", businessType = BusinessType.INSERT)
     @PostMapping("/add")
     @ResponseBody
-    public AjaxResult addSave(Notice notice)
+    public AjaxResult addSave(SysNotice notice)
     {
+        notice.setCreateBy(ShiroUtils.getLoginName());
         return toAjax(noticeService.insertNotice(notice));
     }
 
@@ -90,8 +92,9 @@ public class NoticeController extends BaseController
     @Log(title = "通知公告", businessType = BusinessType.UPDATE)
     @PostMapping("/edit")
     @ResponseBody
-    public AjaxResult editSave(Notice notice)
+    public AjaxResult editSave(SysNotice notice)
     {
+        notice.setUpdateBy(ShiroUtils.getLoginName());
         return toAjax(noticeService.updateNotice(notice));
     }
 
diff --git a/src/main/java/com/ruoyi/project/system/post/controller/PostController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/PostController.java
similarity index 71%
rename from src/main/java/com/ruoyi/project/system/post/controller/PostController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/PostController.java
index 6bf7a185..0207b182 100644
--- a/src/main/java/com/ruoyi/project/system/post/controller/PostController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/PostController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.post.controller;
+package com.ruoyi.web.controller.system;
 
 import java.util.List;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -10,14 +10,15 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.base.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.ExcelUtil;
+import com.ruoyi.framework.util.ShiroUtils;
 import com.ruoyi.framework.web.page.TableDataInfo;
-import com.ruoyi.project.system.post.domain.Post;
-import com.ruoyi.project.system.post.service.IPostService;
+import com.ruoyi.system.domain.SysPost;
+import com.ruoyi.system.service.ISysPostService;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 岗位信息操作处理
@@ -31,7 +32,7 @@ public class PostController extends BaseController
     private String prefix = "system/post";
 
     @Autowired
-    private IPostService postService;
+    private ISysPostService postService;
 
     @RequiresPermissions("system:post:view")
     @GetMapping()
@@ -43,10 +44,10 @@ public class PostController extends BaseController
     @RequiresPermissions("system:post:list")
     @PostMapping("/list")
     @ResponseBody
-    public TableDataInfo list(Post post)
+    public TableDataInfo list(SysPost post)
     {
         startPage();
-        List<Post> list = postService.selectPostList(post);
+        List<SysPost> list = postService.selectPostList(post);
         return getDataTable(list);
     }
 
@@ -54,10 +55,10 @@ public class PostController extends BaseController
     @RequiresPermissions("system:post:export")
     @PostMapping("/export")
     @ResponseBody
-    public AjaxResult export(Post post)
+    public AjaxResult export(SysPost post)
     {
-        List<Post> list = postService.selectPostList(post);
-        ExcelUtil<Post> util = new ExcelUtil<Post>(Post.class);
+        List<SysPost> list = postService.selectPostList(post);
+        ExcelUtil<SysPost> util = new ExcelUtil<SysPost>(SysPost.class);
         return util.exportExcel(list, "post");
     }
 
@@ -93,8 +94,9 @@ public class PostController extends BaseController
     @Log(title = "岗位管理", businessType = BusinessType.INSERT)
     @PostMapping("/add")
     @ResponseBody
-    public AjaxResult addSave(Post post)
+    public AjaxResult addSave(SysPost post)
     {
+        post.setCreateBy(ShiroUtils.getLoginName());
         return toAjax(postService.insertPost(post));
     }
 
@@ -115,8 +117,9 @@ public class PostController extends BaseController
     @Log(title = "岗位管理", businessType = BusinessType.UPDATE)
     @PostMapping("/edit")
     @ResponseBody
-    public AjaxResult editSave(Post post)
+    public AjaxResult editSave(SysPost post)
     {
+        post.setUpdateBy(ShiroUtils.getLoginName());
         return toAjax(postService.updatePost(post));
     }
 
@@ -125,7 +128,7 @@ public class PostController extends BaseController
      */
     @PostMapping("/checkPostNameUnique")
     @ResponseBody
-    public String checkPostNameUnique(Post post)
+    public String checkPostNameUnique(SysPost post)
     {
         return postService.checkPostNameUnique(post);
     }
@@ -135,7 +138,7 @@ public class PostController extends BaseController
      */
     @PostMapping("/checkPostCodeUnique")
     @ResponseBody
-    public String checkPostCodeUnique(Post post)
+    public String checkPostCodeUnique(SysPost post)
     {
         return postService.checkPostCodeUnique(post);
     }
diff --git a/src/main/java/com/ruoyi/project/system/user/controller/ProfileController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/ProfileController.java
similarity index 76%
rename from src/main/java/com/ruoyi/project/system/user/controller/ProfileController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/ProfileController.java
index 7a3778c3..80bc6f18 100644
--- a/src/main/java/com/ruoyi/project/system/user/controller/ProfileController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/ProfileController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.user.controller;
+package com.ruoyi.web.controller.system;
 
 import org.apache.shiro.crypto.hash.Md5Hash;
 import org.slf4j.Logger;
@@ -13,15 +13,15 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.multipart.MultipartFile;
-import com.ruoyi.common.utils.file.FileUploadUtils;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.config.RuoYiConfig;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.framework.web.service.DictService;
-import com.ruoyi.project.system.user.domain.User;
-import com.ruoyi.project.system.user.service.IUserService;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.base.AjaxResult;
+import com.ruoyi.common.config.Global;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.framework.util.FileUploadUtils;
+import com.ruoyi.system.domain.SysUser;
+import com.ruoyi.system.service.ISysDictDataService;
+import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 个人信息 业务处理
@@ -37,10 +37,10 @@ public class ProfileController extends BaseController
     private String prefix = "system/user/profile";
 
     @Autowired
-    private IUserService userService;
+    private ISysUserService userService;
 
     @Autowired
-    private DictService dict;
+    private ISysDictDataService dictDataService;
 
     /**
      * 个人信息
@@ -48,8 +48,8 @@ public class ProfileController extends BaseController
     @GetMapping()
     public String profile(ModelMap mmap)
     {
-        User user = getUser();
-        user.setSex(dict.getLabel("sys_user_sex", user.getSex()));
+        SysUser user = getUser();
+        user.setSex(dictDataService.selectDictLabel("sys_user_sex", user.getSex()));
         mmap.put("user", user);
         mmap.put("roleGroup", userService.selectUserRoleGroup(user.getUserId()));
         mmap.put("postGroup", userService.selectUserPostGroup(user.getUserId()));
@@ -60,7 +60,7 @@ public class ProfileController extends BaseController
     @ResponseBody
     public boolean checkPassword(String password)
     {
-        User user = getUser();
+        SysUser user = getUser();
         String encrypt = new Md5Hash(user.getLoginName() + password + user.getSalt()).toHex().toString();
         if (user.getPassword().equals(encrypt))
         {
@@ -79,7 +79,7 @@ public class ProfileController extends BaseController
     @Log(title = "重置密码", businessType = BusinessType.UPDATE)
     @PostMapping("/resetPwd")
     @ResponseBody
-    public AjaxResult resetPwd(User user)
+    public AjaxResult resetPwd(SysUser user)
     {
         int rows = userService.resetUserPwd(user);
         if (rows > 0)
@@ -116,7 +116,7 @@ public class ProfileController extends BaseController
     @Log(title = "个人信息", businessType = BusinessType.UPDATE)
     @PostMapping("/update")
     @ResponseBody
-    public AjaxResult update(User user)
+    public AjaxResult update(SysUser user)
     {
         if (userService.updateUserInfo(user) > 0)
         {
@@ -132,13 +132,13 @@ public class ProfileController extends BaseController
     @Log(title = "个人信息", businessType = BusinessType.UPDATE)
     @PostMapping("/updateAvatar")
     @ResponseBody
-    public AjaxResult updateAvatar(User user, @RequestParam("avatarfile") MultipartFile file)
+    public AjaxResult updateAvatar(SysUser user, @RequestParam("avatarfile") MultipartFile file)
     {
         try
         {
             if (!file.isEmpty())
             {
-                String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file);
+                String avatar = FileUploadUtils.upload(Global.getAvatarPath(), file);
                 user.setAvatar(avatar);
                 if (userService.updateUserInfo(user) > 0)
                 {
diff --git a/src/main/java/com/ruoyi/project/system/role/controller/RoleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/RoleController.java
similarity index 73%
rename from src/main/java/com/ruoyi/project/system/role/controller/RoleController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/RoleController.java
index 5dfb4bff..03daf1f9 100644
--- a/src/main/java/com/ruoyi/project/system/role/controller/RoleController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/RoleController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.role.controller;
+package com.ruoyi.web.controller.system;
 
 import java.util.List;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -11,14 +11,15 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.base.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.ExcelUtil;
+import com.ruoyi.framework.util.ShiroUtils;
 import com.ruoyi.framework.web.page.TableDataInfo;
-import com.ruoyi.project.system.role.domain.Role;
-import com.ruoyi.project.system.role.service.IRoleService;
+import com.ruoyi.system.domain.SysRole;
+import com.ruoyi.system.service.ISysRoleService;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 角色信息
@@ -32,7 +33,7 @@ public class RoleController extends BaseController
     private String prefix = "system/role";
 
     @Autowired
-    private IRoleService roleService;
+    private ISysRoleService roleService;
 
     @RequiresPermissions("system:role:view")
     @GetMapping()
@@ -44,10 +45,10 @@ public class RoleController extends BaseController
     @RequiresPermissions("system:role:list")
     @PostMapping("/list")
     @ResponseBody
-    public TableDataInfo list(Role role)
+    public TableDataInfo list(SysRole role)
     {
         startPage();
-        List<Role> list = roleService.selectRoleList(role);
+        List<SysRole> list = roleService.selectRoleList(role);
         return getDataTable(list);
     }
 
@@ -55,10 +56,10 @@ public class RoleController extends BaseController
     @RequiresPermissions("system:role:export")
     @PostMapping("/export")
     @ResponseBody
-    public AjaxResult export(Role role)
+    public AjaxResult export(SysRole role)
     {
-        List<Role> list = roleService.selectRoleList(role);
-        ExcelUtil<Role> util = new ExcelUtil<Role>(Role.class);
+        List<SysRole> list = roleService.selectRoleList(role);
+        ExcelUtil<SysRole> util = new ExcelUtil<SysRole>(SysRole.class);
         return util.exportExcel(list, "role");
     }
 
@@ -79,8 +80,10 @@ public class RoleController extends BaseController
     @PostMapping("/add")
     @Transactional(rollbackFor = Exception.class)
     @ResponseBody
-    public AjaxResult addSave(Role role)
+    public AjaxResult addSave(SysRole role)
     {
+        role.setCreateBy(ShiroUtils.getLoginName());
+        ShiroUtils.clearCachedAuthorizationInfo();
         return toAjax(roleService.insertRole(role));
 
     }
@@ -103,8 +106,10 @@ public class RoleController extends BaseController
     @PostMapping("/edit")
     @Transactional(rollbackFor = Exception.class)
     @ResponseBody
-    public AjaxResult editSave(Role role)
+    public AjaxResult editSave(SysRole role)
     {
+        role.setUpdateBy(ShiroUtils.getLoginName());
+        ShiroUtils.clearCachedAuthorizationInfo();
         return toAjax(roleService.updateRole(role));
     }
 
@@ -126,8 +131,9 @@ public class RoleController extends BaseController
     @PostMapping("/rule")
     @Transactional(rollbackFor = Exception.class)
     @ResponseBody
-    public AjaxResult ruleSave(Role role)
+    public AjaxResult ruleSave(SysRole role)
     {
+        role.setUpdateBy(ShiroUtils.getLoginName());
         return toAjax(roleService.updateRule(role));
     }
 
@@ -152,7 +158,7 @@ public class RoleController extends BaseController
      */
     @PostMapping("/checkRoleNameUnique")
     @ResponseBody
-    public String checkRoleNameUnique(Role role)
+    public String checkRoleNameUnique(SysRole role)
     {
         return roleService.checkRoleNameUnique(role);
     }
@@ -162,7 +168,7 @@ public class RoleController extends BaseController
      */
     @PostMapping("/checkRoleKeyUnique")
     @ResponseBody
-    public String checkRoleKeyUnique(Role role)
+    public String checkRoleKeyUnique(SysRole role)
     {
         return roleService.checkRoleKeyUnique(role);
     }
diff --git a/src/main/java/com/ruoyi/project/system/user/controller/UserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/UserController.java
similarity index 67%
rename from src/main/java/com/ruoyi/project/system/user/controller/UserController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/UserController.java
index a5fc6ea4..3be871b4 100644
--- a/src/main/java/com/ruoyi/project/system/user/controller/UserController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/UserController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.user.controller;
+package com.ruoyi.web.controller.system;
 
 import java.util.List;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -11,17 +11,19 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.base.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.ExcelUtil;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.framework.shiro.service.PasswordService;
+import com.ruoyi.framework.util.ShiroUtils;
 import com.ruoyi.framework.web.page.TableDataInfo;
-import com.ruoyi.project.system.post.service.IPostService;
-import com.ruoyi.project.system.role.service.IRoleService;
-import com.ruoyi.project.system.user.domain.User;
-import com.ruoyi.project.system.user.service.IUserService;
+import com.ruoyi.system.domain.SysUser;
+import com.ruoyi.system.service.ISysPostService;
+import com.ruoyi.system.service.ISysRoleService;
+import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 用户信息
@@ -35,13 +37,16 @@ public class UserController extends BaseController
     private String prefix = "system/user";
 
     @Autowired
-    private IUserService userService;
+    private ISysUserService userService;
 
     @Autowired
-    private IRoleService roleService;
+    private ISysRoleService roleService;
 
     @Autowired
-    private IPostService postService;
+    private ISysPostService postService;
+
+    @Autowired
+    private PasswordService passwordService;
 
     @RequiresPermissions("system:user:view")
     @GetMapping()
@@ -53,10 +58,10 @@ public class UserController extends BaseController
     @RequiresPermissions("system:user:list")
     @PostMapping("/list")
     @ResponseBody
-    public TableDataInfo list(User user)
+    public TableDataInfo list(SysUser user)
     {
         startPage();
-        List<User> list = userService.selectUserList(user);
+        List<SysUser> list = userService.selectUserList(user);
         return getDataTable(list);
     }
 
@@ -64,10 +69,10 @@ public class UserController extends BaseController
     @RequiresPermissions("system:user:export")
     @PostMapping("/export")
     @ResponseBody
-    public AjaxResult export(User user)
+    public AjaxResult export(SysUser user)
     {
-        List<User> list = userService.selectUserList(user);
-        ExcelUtil<User> util = new ExcelUtil<User>(User.class);
+        List<SysUser> list = userService.selectUserList(user);
+        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
         return util.exportExcel(list, "user");
     }
 
@@ -90,12 +95,15 @@ public class UserController extends BaseController
     @PostMapping("/add")
     @Transactional(rollbackFor = Exception.class)
     @ResponseBody
-    public AjaxResult addSave(User user)
+    public AjaxResult addSave(SysUser user)
     {
-        if (StringUtils.isNotNull(user.getUserId()) && User.isAdmin(user.getUserId()))
+        if (StringUtils.isNotNull(user.getUserId()) && SysUser.isAdmin(user.getUserId()))
         {
             return error("不允许修改超级管理员用户");
         }
+        user.setSalt(ShiroUtils.randomSalt());
+        user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
+        user.setCreateBy(ShiroUtils.getLoginName());
         return toAjax(userService.insertUser(user));
     }
 
@@ -119,12 +127,13 @@ public class UserController extends BaseController
     @PostMapping("/edit")
     @Transactional(rollbackFor = Exception.class)
     @ResponseBody
-    public AjaxResult editSave(User user)
+    public AjaxResult editSave(SysUser user)
     {
-        if (StringUtils.isNotNull(user.getUserId()) && User.isAdmin(user.getUserId()))
+        if (StringUtils.isNotNull(user.getUserId()) && SysUser.isAdmin(user.getUserId()))
         {
             return error("不允许修改超级管理员用户");
         }
+        user.setUpdateBy(ShiroUtils.getLoginName());
         return toAjax(userService.updateUser(user));
     }
 
@@ -141,8 +150,10 @@ public class UserController extends BaseController
     @Log(title = "重置密码", businessType = BusinessType.UPDATE)
     @PostMapping("/resetPwd")
     @ResponseBody
-    public AjaxResult resetPwd(User user)
+    public AjaxResult resetPwdSave(SysUser user)
     {
+        user.setSalt(ShiroUtils.randomSalt());
+        user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
         return toAjax(userService.resetUserPwd(user));
     }
 
@@ -167,7 +178,7 @@ public class UserController extends BaseController
      */
     @PostMapping("/checkLoginNameUnique")
     @ResponseBody
-    public String checkLoginNameUnique(User user)
+    public String checkLoginNameUnique(SysUser user)
     {
         return userService.checkLoginNameUnique(user.getLoginName());
     }
@@ -177,7 +188,7 @@ public class UserController extends BaseController
      */
     @PostMapping("/checkPhoneUnique")
     @ResponseBody
-    public String checkPhoneUnique(User user)
+    public String checkPhoneUnique(SysUser user)
     {
         return userService.checkPhoneUnique(user);
     }
@@ -187,7 +198,7 @@ public class UserController extends BaseController
      */
     @PostMapping("/checkEmailUnique")
     @ResponseBody
-    public String checkEmailUnique(User user)
+    public String checkEmailUnique(SysUser user)
     {
         return userService.checkEmailUnique(user);
     }
diff --git a/src/main/java/com/ruoyi/project/tool/build/BuildController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/BuildController.java
similarity index 82%
rename from src/main/java/com/ruoyi/project/tool/build/BuildController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/BuildController.java
index fe54d665..95cbcc71 100644
--- a/src/main/java/com/ruoyi/project/tool/build/BuildController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/BuildController.java
@@ -1,10 +1,10 @@
-package com.ruoyi.project.tool.build;
+package com.ruoyi.web.controller.tool;
 
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
-import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * build 表单构建
diff --git a/src/main/java/com/ruoyi/project/tool/gen/controller/GenController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/GenController.java
similarity index 87%
rename from src/main/java/com/ruoyi/project/tool/gen/controller/GenController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/GenController.java
index 2bd42380..e901b5b5 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/controller/GenController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/GenController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.tool.gen.controller;
+package com.ruoyi.web.controller.tool;
 
 import java.io.IOException;
 import java.util.List;
@@ -12,13 +12,13 @@ import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.support.Convert;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.page.TableDataInfo;
-import com.ruoyi.project.tool.gen.domain.TableInfo;
-import com.ruoyi.project.tool.gen.service.IGenService;
+import com.ruoyi.generator.domain.TableInfo;
+import com.ruoyi.generator.service.IGenService;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * 代码生成 操作处理
diff --git a/src/main/java/com/ruoyi/project/tool/swagger/SwaggerController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/SwaggerController.java
similarity index 81%
rename from src/main/java/com/ruoyi/project/tool/swagger/SwaggerController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/SwaggerController.java
index 406c9c8b..ad22b762 100644
--- a/src/main/java/com/ruoyi/project/tool/swagger/SwaggerController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/SwaggerController.java
@@ -1,10 +1,10 @@
-package com.ruoyi.project.tool.swagger;
+package com.ruoyi.web.controller.tool;
 
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
-import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.web.core.base.BaseController;
 
 /**
  * swagger 接口
diff --git a/src/main/java/com/ruoyi/project/tool/swagger/TestController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java
similarity index 91%
rename from src/main/java/com/ruoyi/project/tool/swagger/TestController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java
index 13ab65e5..72d4cf5c 100644
--- a/src/main/java/com/ruoyi/project/tool/swagger/TestController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java
@@ -1,15 +1,18 @@
-package com.ruoyi.project.tool.swagger;
+package com.ruoyi.web.controller.tool;
 
 import java.util.ArrayList;
 import java.util.List;
+
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
+
+import com.ruoyi.common.base.AjaxResult;
+import com.ruoyi.web.core.base.BaseController;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
diff --git a/src/main/java/com/ruoyi/framework/web/controller/BaseController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/core/base/BaseController.java
similarity index 88%
rename from src/main/java/com/ruoyi/framework/web/controller/BaseController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/core/base/BaseController.java
index 3af85757..8c61e436 100644
--- a/src/main/java/com/ruoyi/framework/web/controller/BaseController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/core/base/BaseController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.framework.web.controller;
+package com.ruoyi.web.core.base;
 
 import java.text.SimpleDateFormat;
 import java.util.Date;
@@ -8,13 +8,13 @@ import org.springframework.web.bind.WebDataBinder;
 import org.springframework.web.bind.annotation.InitBinder;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.ruoyi.common.base.AjaxResult;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.security.ShiroUtils;
-import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.framework.util.ShiroUtils;
 import com.ruoyi.framework.web.page.PageDomain;
 import com.ruoyi.framework.web.page.TableDataInfo;
 import com.ruoyi.framework.web.page.TableSupport;
-import com.ruoyi.project.system.user.domain.User;
+import com.ruoyi.system.domain.SysUser;
 
 /**
  * web层通用数据处理
@@ -121,12 +121,12 @@ public class BaseController
         return StringUtils.format("redirect:{}", url);
     }
 
-    public User getUser()
+    public SysUser getUser()
     {
         return ShiroUtils.getUser();
     }
 
-    public void setUser(User user)
+    public void setUser(SysUser user)
     {
         ShiroUtils.setUser(user);
     }
diff --git a/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
similarity index 80%
rename from src/main/java/com/ruoyi/framework/config/SwaggerConfig.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
index a949c2e3..88f63450 100644
--- a/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
@@ -1,8 +1,8 @@
-package com.ruoyi.framework.config;
+package com.ruoyi.web.core.config;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import com.ruoyi.common.config.Global;
 import springfox.documentation.builders.ApiInfoBuilder;
 import springfox.documentation.builders.PathSelectors;
 import springfox.documentation.builders.RequestHandlerSelectors;
@@ -21,10 +21,6 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
 @EnableSwagger2
 public class SwaggerConfig
 {
-    /** 系统基础配置 */
-    @Autowired
-    private RuoYiConfig ruoYiConfig;
-
     /**
      * 创建API
      */
@@ -51,8 +47,8 @@ public class SwaggerConfig
         return new ApiInfoBuilder()
                 .title("标题:若依管理系统_接口文档")
                 .description("描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...")
-                .contact(new Contact(ruoYiConfig.getName(), null, null))
-                .version("版本号:" + ruoYiConfig.getVersion())
+                .contact(new Contact(Global.getName(), null, null))
+                .version("版本号:" + Global.getVersion())
                 .build();
     }
 }
diff --git a/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
similarity index 100%
rename from src/main/resources/application-druid.yml
rename to ruoyi-admin/src/main/resources/application-druid.yml
diff --git a/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
similarity index 87%
rename from src/main/resources/application.yml
rename to ruoyi-admin/src/main/resources/application.yml
index 07f4dafc..571f66d4 100644
--- a/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -9,7 +9,7 @@ ruoyi:
   # 文件上传路径
   profile: D:/profile/
   # 获取ip地址开关
-  addressEnabled: false
+  addressEnabled: true
 
 # 开发环境配置
 server:
@@ -70,11 +70,11 @@ spring:
 # MyBatis
 mybatis:
     # 搜索指定包别名
-    typeAliasesPackage: com.ruoyi.project
+    typeAliasesPackage: com.ruoyi
     # 配置mapper的扫描,找到所有的mapper.xml映射文件
-    mapperLocations: classpath:mybatis/**/*Mapper.xml
+    mapperLocations: classpath:mapper/system/*Mapper.xml,classpath:mapper/quartz/*Mapper.xml,classpath:mapper/generator/*Mapper.xml
     # 加载全局的配置文件
-    configLocation: classpath:mybatis/mybatis-config.xml
+    configLocation: classpath:mapper/mybatis-config.xml
 
 # PageHelper分页插件
 pagehelper: 
diff --git a/src/main/resources/banner.txt b/ruoyi-admin/src/main/resources/banner.txt
similarity index 100%
rename from src/main/resources/banner.txt
rename to ruoyi-admin/src/main/resources/banner.txt
diff --git a/src/main/resources/ehcache/ehcache-shiro.xml b/ruoyi-admin/src/main/resources/ehcache/ehcache-shiro.xml
similarity index 100%
rename from src/main/resources/ehcache/ehcache-shiro.xml
rename to ruoyi-admin/src/main/resources/ehcache/ehcache-shiro.xml
diff --git a/src/main/resources/i18n/messages.properties b/ruoyi-admin/src/main/resources/i18n/messages.properties
similarity index 100%
rename from src/main/resources/i18n/messages.properties
rename to ruoyi-admin/src/main/resources/i18n/messages.properties
diff --git a/src/main/resources/logback.xml b/ruoyi-admin/src/main/resources/logback.xml
similarity index 100%
rename from src/main/resources/logback.xml
rename to ruoyi-admin/src/main/resources/logback.xml
diff --git a/src/main/resources/static/ajax/libs/beautifyhtml/beautifyhtml.js b/ruoyi-admin/src/main/resources/static/ajax/libs/beautifyhtml/beautifyhtml.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/beautifyhtml/beautifyhtml.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/beautifyhtml/beautifyhtml.js
diff --git a/src/main/resources/static/ajax/libs/blockUI/jquery.blockUI.js b/ruoyi-admin/src/main/resources/static/ajax/libs/blockUI/jquery.blockUI.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/blockUI/jquery.blockUI.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/blockUI/jquery.blockUI.js
diff --git a/src/main/resources/static/ajax/libs/bootstrap-table/bootstrap-table.min.css b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/bootstrap-table.min.css
similarity index 100%
rename from src/main/resources/static/ajax/libs/bootstrap-table/bootstrap-table.min.css
rename to ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/bootstrap-table.min.css
diff --git a/src/main/resources/static/ajax/libs/bootstrap-table/bootstrap-table.min.js b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/bootstrap-table.min.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/bootstrap-table/bootstrap-table.min.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/bootstrap-table.min.js
diff --git a/src/main/resources/static/ajax/libs/bootstrap-table/extensions/editable/bootstrap-table-editable.js b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/editable/bootstrap-table-editable.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/bootstrap-table/extensions/editable/bootstrap-table-editable.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/editable/bootstrap-table-editable.js
diff --git a/src/main/resources/static/ajax/libs/bootstrap-table/extensions/editable/bootstrap-table-editable.min.js b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/editable/bootstrap-table-editable.min.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/bootstrap-table/extensions/editable/bootstrap-table-editable.min.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/editable/bootstrap-table-editable.min.js
diff --git a/src/main/resources/static/ajax/libs/bootstrap-table/extensions/export/bootstrap-table-export.js b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/export/bootstrap-table-export.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/bootstrap-table/extensions/export/bootstrap-table-export.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/export/bootstrap-table-export.js
diff --git a/src/main/resources/static/ajax/libs/bootstrap-table/extensions/export/tableExport.js b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/export/tableExport.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/bootstrap-table/extensions/export/tableExport.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/export/tableExport.js
diff --git a/src/main/resources/static/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.js b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.js
diff --git a/src/main/resources/static/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js
diff --git a/src/main/resources/static/ajax/libs/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.js b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.js
diff --git a/src/main/resources/static/ajax/libs/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.min.js b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.min.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.min.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.min.js
diff --git a/src/main/resources/static/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.js b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.js
diff --git a/src/main/resources/static/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.min.js b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.min.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.min.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.min.js
diff --git a/src/main/resources/static/ajax/libs/bootstrap-treetable/bootstrap-treetable.css b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-treetable/bootstrap-treetable.css
similarity index 99%
rename from src/main/resources/static/ajax/libs/bootstrap-treetable/bootstrap-treetable.css
rename to ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-treetable/bootstrap-treetable.css
index 12577e89..85b40c78 100644
--- a/src/main/resources/static/ajax/libs/bootstrap-treetable/bootstrap-treetable.css
+++ b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-treetable/bootstrap-treetable.css
@@ -1,14 +1,14 @@
-.bootstrap-tree-table .treetable-indent {width:16px; height: 16px; display: inline-block; position: relative;}
-.bootstrap-tree-table .treetable-expander {width:16px; height: 16px; display: inline-block; position: relative; cursor: pointer;}
-.bootstrap-tree-table .treetable-selected{background: #f5f5f5 !important;}
-.bootstrap-tree-table .treetable-table{border:0 !important;margin-bottom:0}
-.bootstrap-tree-table .treetable-table tbody {display:block;height:auto;overflow-y:auto;}
-.bootstrap-tree-table .treetable-table thead, .treetable-table tbody tr {display:table;width:100%;table-layout:fixed;}
-.bootstrap-tree-table .treetable-thead th{line-height:24px;border: 0 !important;border-radius: 4px;border-left:0px solid #e7eaec !important;border-bottom:1px solid #ccc!important;text-align: left;}
-.bootstrap-tree-table .treetable-thead tr :first-child{border-left:0 !important}
-.bootstrap-tree-table .treetable-tbody td{border: 0 !important;border-left:0px solid #e7eaec !important;border-bottom:1px solid #e7eaec!important;overflow: hidden; white-space: nowrap; text-overflow: ellipsis;}
-.bootstrap-tree-table .treetable-tbody tr :first-child{border-left:0 !important}
-.bootstrap-tree-table .treetable-bars .tool-left, .bootstrap-tree-table .treetable-bars .tool-right{margin-top: 10px; margin-bottom: 10px;}
-.bootstrap-tree-table .treetable-bars .tool-left{float: left;}
-.bootstrap-tree-table .treetable-bars .tool-right{float: right;}
-.bootstrap-tree-table .treetable-bars .columns li label{display: block;padding: 3px 20px;clear: both;font-weight: 400;line-height: 1.428571429;max-width: 100%;margin-bottom: 5px;cursor:pointer;}
+.bootstrap-tree-table .treetable-indent {width:16px; height: 16px; display: inline-block; position: relative;}
+.bootstrap-tree-table .treetable-expander {width:16px; height: 16px; display: inline-block; position: relative; cursor: pointer;}
+.bootstrap-tree-table .treetable-selected{background: #f5f5f5 !important;}
+.bootstrap-tree-table .treetable-table{border:0 !important;margin-bottom:0}
+.bootstrap-tree-table .treetable-table tbody {display:block;height:auto;overflow-y:auto;}
+.bootstrap-tree-table .treetable-table thead, .treetable-table tbody tr {display:table;width:100%;table-layout:fixed;}
+.bootstrap-tree-table .treetable-thead th{line-height:24px;border: 0 !important;border-radius: 4px;border-left:0px solid #e7eaec !important;border-bottom:1px solid #ccc!important;text-align: left;}
+.bootstrap-tree-table .treetable-thead tr :first-child{border-left:0 !important}
+.bootstrap-tree-table .treetable-tbody td{border: 0 !important;border-left:0px solid #e7eaec !important;border-bottom:1px solid #e7eaec!important;overflow: hidden; white-space: nowrap; text-overflow: ellipsis;}
+.bootstrap-tree-table .treetable-tbody tr :first-child{border-left:0 !important}
+.bootstrap-tree-table .treetable-bars .tool-left, .bootstrap-tree-table .treetable-bars .tool-right{margin-top: 10px; margin-bottom: 10px;}
+.bootstrap-tree-table .treetable-bars .tool-left{float: left;}
+.bootstrap-tree-table .treetable-bars .tool-right{float: right;}
+.bootstrap-tree-table .treetable-bars .columns li label{display: block;padding: 3px 20px;clear: both;font-weight: 400;line-height: 1.428571429;max-width: 100%;margin-bottom: 5px;cursor:pointer;}
diff --git a/src/main/resources/static/ajax/libs/bootstrap-treetable/bootstrap-treetable.js b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-treetable/bootstrap-treetable.js
similarity index 97%
rename from src/main/resources/static/ajax/libs/bootstrap-treetable/bootstrap-treetable.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-treetable/bootstrap-treetable.js
index a3e4d34f..90fb1555 100644
--- a/src/main/resources/static/ajax/libs/bootstrap-treetable/bootstrap-treetable.js
+++ b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-treetable/bootstrap-treetable.js
@@ -1,670 +1,670 @@
-/**
- * bootstrapTreeTable
- *
- * @author swifly
- */
-(function($) {
-    "use strict";
-
-    $.fn.bootstrapTreeTable = function(options, param) {
-        var target = $(this).data('bootstrap.tree.table');
-        target = target ? target : $(this);
-        // 如果是调用方法
-        if (typeof options == 'string') {
-            return $.fn.bootstrapTreeTable.methods[options](target, param);
-        }
-        // 如果是初始化组件
-        options = $.extend({}, $.fn.bootstrapTreeTable.defaults, options || {});
-        target.hasSelectItem = false;// 是否有radio或checkbox
-        target.data_list = null; //用于缓存格式化后的数据-按父分组
-        target.data_obj = null; //用于缓存格式化后的数据-按id存对象
-        target.hiddenColumns = []; //用于存放被隐藏列的field
-        target.lastAjaxParams; //用户最后一次请求的参数
-        target.isFixWidth=false; //是否有固定宽度
-        // 初始化
-        var init = function() {
-            // 初始化容器
-            initContainer();
-            // 初始化工具栏
-            initToolbar();
-            // 初始化表头
-            initHeader();
-            // 初始化表体
-            initBody();
-            // 初始化数据服务
-            initServer();
-            // 动态设置表头宽度
-            autoTheadWidth(true);
-            // 缓存target对象
-            target.data('bootstrap.tree.table', target);
-        }
-        // 初始化容器
-        var initContainer = function() {
-            // 在外层包装一下div,样式用的bootstrap-table的
-            var $main_div = $("<div class='bootstrap-tree-table'></div>");
-            var $treetable = $("<div class='treetable-table'></div>");
-            target.before($main_div);
-            $main_div.append($treetable);
-            $treetable.append(target);
-            target.addClass("table");
-            if (options.striped) {
-                target.addClass('table-striped');
-            }
-            if (options.bordered) {
-                target.addClass('table-bordered');
-            }
-            if (options.hover) {
-                target.addClass('table-hover');
-            }
-            if (options.condensed) {
-                target.addClass('table-condensed');
-            }
-            target.html("");
-        }
-        // 初始化工具栏
-        var initToolbar = function() {
-            var $toolbar = $("<div class='treetable-bars'></div>");
-            if (options.toolbar) {
-                $(options.toolbar).addClass('tool-left');
-                $toolbar.append($(options.toolbar));
-            }
-            var $rightToolbar = $('<div class="btn-group tool-right">');
-            $toolbar.append($rightToolbar);
-            target.parent().before($toolbar);
-            // 是否显示刷新按钮
-            if (options.showRefresh) {
-                var $refreshBtn = $('<button class="btn btn-default btn-outline" type="button" aria-label="refresh" title="刷新"><i class="glyphicon glyphicon-repeat"></i></button>');
-                $rightToolbar.append($refreshBtn);
-                registerRefreshBtnClickEvent($refreshBtn);
-            }
-            // 是否显示列选项
-            if (options.showColumns) {
-                var $columns_div = $('<div class="btn-group pull-right" title="列"><button type="button" aria-label="columns" class="btn btn-default btn-outline dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="glyphicon glyphicon-list"></i> <span class="caret"></span></button></div>');
-                var $columns_ul = $('<ul class="dropdown-menu columns" role="menu"></ul>');
-                $.each(options.columns, function(i, column) {
-                    if (column.field != 'selectItem') {
-                        var _li = null;
-                        if(typeof column.visible == "undefined"||column.visible==true){
-                            _li = $('<li role="menuitem"><label><input type="checkbox" checked="checked" data-field="'+column.field+'" value="'+column.field+'" > '+column.title+'</label></li>');
-                        }else{
-                            _li = $('<li role="menuitem"><label><input type="checkbox" data-field="'+column.field+'" value="'+column.field+'" > '+column.title+'</label></li>');
-                            target.hiddenColumns.push(column.field);
-                        }
-                        $columns_ul.append(_li);
-                    }
-                });
-                $columns_div.append($columns_ul);
-                $rightToolbar.append($columns_div);
-                // 注册列选项事件
-                registerColumnClickEvent();
-            }else{
-                $.each(options.columns, function(i, column) {
-                    if (column.field != 'selectItem') {
-                        if(!(typeof column.visible == "undefined"||column.visible==true)){
-                            target.hiddenColumns.push(column.field);
-                        }
-                    }
-                });
-            }
-        }
-        // 初始化隐藏列
-        var initHiddenColumns = function(){
-            $.each(target.hiddenColumns, function(i, field) {
-                target.find("."+field+"_cls").hide();
-            });
-        }
-        // 初始化表头
-        var initHeader = function() {
-            var $thr = $('<tr></tr>');
-            $.each(options.columns, function(i, column) {
-                var $th = null;
-                // 判断有没有选择列
-                if (i == 0 && column.field == 'selectItem') {
-                    target.hasSelectItem = true;
-                    $th = $('<th style="width:36px"></th>');
-                } else {
-                    $th = $('<th style="' + ((column.width) ? ('width:' + column.width) : '') + '" class="' + column.field + '_cls"></th>');
-                }
-                if((!target.isFixWidth)&& column.width){
-                    target.isFixWidth = column.width.indexOf("px")>-1?true:false;
-                }
-                $th.text(column.title);
-                $thr.append($th);
-            });
-            var $thead = $('<thead class="treetable-thead"></thead>');
-            $thead.append($thr);
-            target.append($thead);
-        }
-        // 初始化表体
-        var initBody = function() {
-            var $tbody = $('<tbody class="treetable-tbody"></tbody>');
-            target.append($tbody);
-            // 默认高度
-            if (options.height) {
-                $tbody.css("height", options.height);
-            }
-        }
-        // 初始化数据服务
-        var initServer = function(parms) {
-            // 加载数据前先清空
-            target.data_list = {};
-            target.data_obj = {};
-            var $tbody = target.find("tbody");
-            // 添加加载loading
-            var $loading = '<tr><td colspan="' + options.columns.length + '"><div style="display: block;text-align: center;">正在努力地加载数据中,请稍候……</div></td></tr>'
-            $tbody.html($loading);
-            if (options.url) {
-                $.ajax({
-                    type: options.type,
-                    url: options.url,
-                    data: parms ? parms : options.ajaxParams,
-                    dataType: "JSON",
-                    success: function(data, textStatus, jqXHR) {
-                        renderTable(data);
-                    },
-                    error: function(xhr, textStatus) {
-                        var _errorMsg = '<tr><td colspan="' + options.columns.length + '"><div style="display: block;text-align: center;">' + xhr.responseText + '</div></td></tr>'
-                        $tbody.html(_errorMsg);
-                    },
-                });
-            } else {
-                renderTable(options.data);
-            }
-        }
-        // 加载完数据后渲染表格
-        var renderTable = function(data) {
-            var $tbody = target.find("tbody");
-            // 先清空
-            $tbody.html("");
-            if (!data || data.length <= 0) {
-                var _empty = '<tr><td colspan="' + options.columns.length + '"><div style="display: block;text-align: center;">没有找到匹配的记录</div></td></tr>'
-                $tbody.html(_empty);
-                return;
-            }
-            // 缓存并格式化数据
-            formatData(data);
-            // 获取所有根节点
-            var rootNode = target.data_list["_root_"];
-            // 开始绘制
-            if (rootNode) {
-                $.each(rootNode, function(i, item) {
-                    var _child_row_id = "row_id_" + i
-                    recursionNode(item, 1, _child_row_id, "row_root");
-                });
-            }
-            // 下边的操作主要是为了查询时让一些没有根节点的节点显示
-            $.each(data, function(i, item) {
-                if (!item.isShow) {
-                    var tr = renderRow(item, false, 1, "", "");
-                    $tbody.append(tr);
-                }
-            });
-            target.append($tbody);
-            registerExpanderEvent();
-            registerRowClickEvent();
-            initHiddenColumns();
-            // 动态设置表头宽度
-            autoTheadWidth()
-        }
-        // 动态设置表头宽度
-        var autoTheadWidth = function(initFlag) {
-            if(options.height>0){
-                var $thead = target.find("thead");
-                var $tbody = target.find("tbody");
-                var borderWidth = parseInt(target.css("border-left-width")) + parseInt(target.css("border-right-width"))
-                
-                $thead.css("width", $tbody.children(":first").width());
-                if(initFlag){
-                    var resizeWaiter = false;
-                    $(window).resize(function() {
-                        if(!resizeWaiter){
-                            resizeWaiter = true;
-                            setTimeout(function(){
-                                if(!target.isFixWidth){
-                                    $tbody.css("width", target.parent().width()-borderWidth);
-                                }
-                                $thead.css("width", $tbody.children(":first").width());
-                                resizeWaiter = false;
-                            }, 300);
-                        }
-                    });
-                }
-            }
-        
-        }
-        // 缓存并格式化数据
-        var formatData = function(data) {
-            var _root = options.rootIdValue ? options.rootIdValue : null
-            $.each(data, function(index, item) {
-                // 添加一个默认属性,用来判断当前节点有没有被显示
-                item.isShow = false;
-                // 这里兼容几种常见Root节点写法
-                // 默认的几种判断
-                var _defaultRootFlag = item[options.parentId] == '0' ||
-                    item[options.parentId] == 0 ||
-                    item[options.parentId] == null ||
-                    item[options.parentId] == '';
-                if (!item[options.parentId] || (_root ? (item[options.parentId] == options.rootIdValue) : _defaultRootFlag)) {
-                    if (!target.data_list["_root_"]) {
-                        target.data_list["_root_"] = [];
-                    }
-                    if (!target.data_obj["id_" + item[options.id]]) {
-                        target.data_list["_root_"].push(item);
-                    }
-                } else {
-                    if (!target.data_list["_n_" + item[options.parentId]]) {
-                        target.data_list["_n_" + item[options.parentId]] = [];
-                    }
-                    if (!target.data_obj["id_" + item[options.id]]) {
-                        target.data_list["_n_" + item[options.parentId]].push(item);
-                    }
-                }
-                target.data_obj["id_" + item[options.id]] = item;
-            });
-        }
-        // 递归获取子节点并且设置子节点
-        var recursionNode = function(parentNode, lv, row_id, p_id) {
-            var $tbody = target.find("tbody");
-            var _ls = target.data_list["_n_" + parentNode[options.id]];
-            var $tr = renderRow(parentNode, _ls ? true : false, lv, row_id, p_id);
-            $tbody.append($tr);
-            if (_ls) {
-                $.each(_ls, function(i, item) {
-                    var _child_row_id = row_id + "_" + i
-                    recursionNode(item, (lv + 1), _child_row_id, row_id)
-                });
-            }
-        };
-        // 绘制行
-        var renderRow = function(item, isP, lv, row_id, p_id) {
-            // 标记已显示
-            item.isShow = true;
-            item.row_id = row_id;
-            item.p_id = p_id;
-            item.lv = lv;
-            var $tr = $('<tr id="' + row_id + '" pid="' + p_id + '"></tr>');
-            var _icon = options.expanderCollapsedClass;
-            if (options.expandAll) {
-                $tr.css("display", "table");
-                _icon = options.expanderExpandedClass;
-            } else if (lv == 1) {
-                $tr.css("display", "table");
-                _icon = (options.expandFirst) ? options.expanderExpandedClass : options.expanderCollapsedClass;
-            } else if (lv == 2) {
-                if (options.expandFirst) {
-                    $tr.css("display", "table");
-                } else {
-                    $tr.css("display", "none");
-                }
-                _icon = options.expanderCollapsedClass;
-            } else {
-                $tr.css("display", "none");
-                _icon = options.expanderCollapsedClass;
-            }
-            $.each(options.columns, function(index, column) {
-                // 判断有没有选择列
-                if (column.field == 'selectItem') {
-                    target.hasSelectItem = true;
-                    var $td = $('<td style="text-align:center;width:36px"></td>');
-                    if (column.radio) {
-                        var _ipt = $('<input name="select_item" type="radio" value="' + item[options.id] + '"></input>');
-                        $td.append(_ipt);
-                    }
-                    if (column.checkbox) {
-                        var _ipt = $('<input name="select_item" type="checkbox" value="' + item[options.id] + '"></input>');
-                        $td.append(_ipt);
-                    }
-                    $tr.append($td);
-                } else {
-                    var $td = $('<td name="' + column.field + '" class="' + column.field + '_cls"></td>');
-                    if(column.width){
-                        $td.css("width",column.width);
-                    }
-                    if(column.align){
-                        $td.css("text-align",column.align);
-                    }
-                    if(options.expandColumn == index){
-                        $td.css("text-align","left");
-                    }
-                    if(column.valign){
-                        $td.css("vertical-align",column.valign);
-                    }
-                    if(options.showTitle){
-                        $td.addClass("ellipsis");
-                    }
-                    // 增加formatter渲染
-                    if (column.formatter) {
-                        $td.html(column.formatter.call(this, item[column.field], item, index));
-                    } else {
-                        if(options.showTitle){
-                            // 只在字段没有formatter时才添加title属性
-                            $td.attr("title",item[column.field]);
-                        }
-                        $td.text(item[column.field]);
-                    }
-                    if (options.expandColumn == index) {
-                        if (!isP) {
-                            $td.prepend('<span class="treetable-expander"></span>')
-                        } else {
-                            $td.prepend('<span class="treetable-expander ' + _icon + '"></span>')
-                        }
-                        for (var int = 0; int < (lv - 1); int++) {
-                            $td.prepend('<span class="treetable-indent"></span>')
-                        }
-                    }
-                    $tr.append($td);
-                }
-            });
-            return $tr;
-        }
-        // 注册刷新按钮点击事件
-        var registerRefreshBtnClickEvent = function(btn) {
-            $(btn).off('click').on('click', function () {
-                target.refresh();
-            });
-        }
-        // 注册列选项事件
-        var registerColumnClickEvent = function() {
-            $(".bootstrap-tree-table .treetable-bars .columns label input").off('click').on('click', function () {
-                var $this = $(this);
-                if($this.prop('checked')){
-                    target.showColumn($(this).val());
-                }else{
-                    target.hideColumn($(this).val());
-                }
-            });
-        }
-        // 注册行点击选中事件
-        var registerRowClickEvent = function() {
-            target.find("tbody").find("tr").unbind();
-            target.find("tbody").find("tr").click(function() {
-                if (target.hasSelectItem) {
-                    var _ipt = $(this).find("input[name='select_item']");
-                    if (_ipt.attr("type") == "radio") {
-                        _ipt.prop('checked', true);
-                        target.find("tbody").find("tr").removeClass("treetable-selected");
-                        $(this).addClass("treetable-selected");
-                    } else {
-                        if (_ipt.prop('checked')) {
-                            _ipt.prop('checked', false);
-                            $(this).removeClass("treetable-selected");
-                        } else {
-                            _ipt.prop('checked', true);
-                            $(this).addClass("treetable-selected");
-                        }
-                    }
-                }
-            });
-        }
-        // 注册小图标点击事件--展开缩起
-        var registerExpanderEvent = function() {
-            target.find("tbody").find("tr").find(".treetable-expander").unbind();
-            target.find("tbody").find("tr").find(".treetable-expander").click(function() {
-                var _isExpanded = $(this).hasClass(options.expanderExpandedClass);
-                var _isCollapsed = $(this).hasClass(options.expanderCollapsedClass);
-                if (_isExpanded || _isCollapsed) {
-                    var tr = $(this).parent().parent();
-                    var row_id = tr.attr("id");
-                    var _ls = target.find("tbody").find("tr[id^='" + row_id + "_']"); //下所有
-                    if (_isExpanded) {
-                        $(this).removeClass(options.expanderExpandedClass);
-                        $(this).addClass(options.expanderCollapsedClass);
-                        if (_ls && _ls.length > 0) {
-                            $.each(_ls, function(index, item) {
-                                $(item).css("display", "none");
-                            });
-                        }
-                    } else {
-                        $(this).removeClass(options.expanderCollapsedClass);
-                        $(this).addClass(options.expanderExpandedClass);
-                        if (_ls && _ls.length > 0) {
-                            $.each(_ls, function(index, item) {
-                                // 父icon
-                                var _p_icon = $("#" + $(item).attr("pid")).children().eq(options.expandColumn).find(".treetable-expander");
-                                if (_p_icon.hasClass(options.expanderExpandedClass)) {
-                                    $(item).css("display", "table");
-                                }
-                            });
-                        }
-                    }
-                }
-            });
-        }
-        // 刷新数据
-        target.refresh = function(parms) {
-            if(parms){
-                target.lastAjaxParams=parms;
-            }
-            initServer(target.lastAjaxParams);
-        }
-        // 添加数据刷新表格
-        target.appendData = function(data) {
-            // 下边的操作主要是为了查询时让一些没有根节点的节点显示
-            $.each(data, function(i, item) {
-                var _data = target.data_obj["id_" + item[options.id]];
-                var _p_data = target.data_obj["id_" + item[options.parentId]];
-                var _c_list = target.data_list["_n_" + item[options.parentId]];
-                var row_id = ""; //行id
-                var p_id = ""; //父行id
-                var _lv = 1; //如果没有父就是1默认显示
-                var tr; //要添加行的对象
-                if (_data && _data.row_id && _data.row_id != "") {
-                    row_id = _data.row_id; // 如果已经存在了,就直接引用原来的
-                }
-                if (_p_data) {
-                    p_id = _p_data.row_id;
-                    if (row_id == "") {
-                        var _tmp = 0
-                        if (_c_list && _c_list.length > 0) {
-                            _tmp = _c_list.length;
-                        }
-                        row_id = _p_data.row_id + "_" + _tmp;
-                    }
-                    _lv = _p_data.lv + 1; //如果有父
-                    // 绘制行
-                    tr = renderRow(item, false, _lv, row_id, p_id);
-
-                    var _p_icon = $("#" + _p_data.row_id).children().eq(options.expandColumn).find(".treetable-expander");
-                    var _isExpanded = _p_icon.hasClass(options.expanderExpandedClass);
-                    var _isCollapsed = _p_icon.hasClass(options.expanderCollapsedClass);
-                    // 父节点有没有展开收缩按钮
-                    if (_isExpanded || _isCollapsed) {
-                        // 父节点展开状态显示新加行
-                        if (_isExpanded) {
-                            tr.css("display", "table");
-                        }
-                    } else {
-                        // 父节点没有展开收缩按钮则添加
-                        _p_icon.addClass(options.expanderCollapsedClass);
-                    }
-
-                    if (_data) {
-                        $("#" + _data.row_id).before(tr);
-                        $("#" + _data.row_id).remove();
-                    } else {
-                        // 计算父的同级下一行
-                        var _tmp_ls = _p_data.row_id.split("_");
-                        var _p_next = _p_data.row_id.substring(0, _p_data.row_id.length - 1) + (parseInt(_tmp_ls[_tmp_ls.length - 1]) + 1);
-                        // 画上
-                        $("#" + _p_next).before(tr);
-                    }
-                } else {
-                    tr = renderRow(item, false, _lv, row_id, p_id);
-                    if (_data) {
-                        $("#" + _data.row_id).before(tr);
-                        $("#" + _data.row_id).remove();
-                    } else {
-                        // 画上
-                        var tbody = target.find("tbody");
-                        tbody.append(tr);
-                    }
-                }
-                item.isShow = true;
-                // 缓存并格式化数据
-                formatData([item]);
-            });
-            registerExpanderEvent();
-            registerRowClickEvent();
-            initHiddenColumns();
-        }
-
-        // 展开/折叠指定的行
-        target.toggleRow=function(id) {
-            var _rowData = target.data_obj["id_" + id];
-            var $row_expander = $("#"+_rowData.row_id).find(".treetable-expander");
-            $row_expander.trigger("click");
-        }
-        // 展开指定的行
-        target.expandRow=function(id) {
-            var _rowData = target.data_obj["id_" + id];
-            var $row_expander = $("#"+_rowData.row_id).find(".treetable-expander");
-            var _isCollapsed = $row_expander.hasClass(target.options.expanderCollapsedClass);
-            if (_isCollapsed) {
-                $row_expander.trigger("click");
-            }
-        }
-        // 折叠 指定的行
-        target.collapseRow=function(id) {
-            var _rowData = target.data_obj["id_" + id];
-            var $row_expander = $("#"+_rowData.row_id).find(".treetable-expander");
-            var _isExpanded = $row_expander.hasClass(target.options.expanderExpandedClass);
-            if (_isExpanded) {
-                $row_expander.trigger("click");
-            }
-        }
-        // 展开所有的行
-        target.expandAll=function() {
-            target.find("tbody").find("tr").find(".treetable-expander").each(function(i,n){
-                var _isCollapsed = $(n).hasClass(options.expanderCollapsedClass);
-                if (_isCollapsed) {
-                    $(n).trigger("click");
-                }
-            })
-        }
-        // 折叠所有的行
-        target.collapseAll=function() {
-            target.find("tbody").find("tr").find(".treetable-expander").each(function(i,n){
-                var _isExpanded = $(n).hasClass(options.expanderExpandedClass);
-                if (_isExpanded) {
-                    $(n).trigger("click");
-                }
-            })
-        }
-        // 显示指定列
-        target.showColumn=function(field,flag) {
-            var _index = $.inArray(field, target.hiddenColumns);
-            if (_index > -1) {
-                target.hiddenColumns.splice(_index, 1);
-            }
-            target.find("."+field+"_cls").show();
-            //是否更新列选项状态
-            if(flag&&options.showColumns){
-                var $input = $(".bootstrap-tree-table .treetable-bars .columns label").find("input[value='"+field+"']")
-                $input.prop("checked", 'checked');
-            }
-        }
-        // 隐藏指定列
-        target.hideColumn=function(field,flag) {
-            target.hiddenColumns.push(field);
-            target.find("."+field+"_cls").hide();
-            //是否更新列选项状态
-            if(flag&&options.showColumns){
-                var $input = $(".bootstrap-tree-table .treetable-bars .columns label").find("input[value='"+field+"']")
-                $input.prop("checked", '');
-            }
-        }
-        // 初始化
-        init();
-        return target;
-    };
-
-    // 组件方法封装........
-    $.fn.bootstrapTreeTable.methods = {
-        // 为了兼容bootstrap-table的写法,统一返回数组,这里返回了表格显示列的数据
-        getSelections: function(target, data) {
-            // 所有被选中的记录input
-            var _ipt = target.find("tbody").find("tr").find("input[name='select_item']:checked");
-            var chk_value = [];
-            // 如果是radio
-            if (_ipt.attr("type") == "radio") {
-                var _data = target.data_obj["id_" + _ipt.val()];
-                chk_value.push(_data);
-            } else {
-                _ipt.each(function(_i, _item) {
-                    var _data = target.data_obj["id_" + $(_item).val()];
-                    chk_value.push(_data);
-                });
-            }
-            return chk_value;
-        },
-        // 刷新记录
-        refresh: function(target, parms) {
-            if (parms) {
-                target.refresh(parms);
-            } else {
-                target.refresh();
-            }
-        },
-        // 添加数据到表格
-        appendData: function(target, data) {
-            if (data) {
-                target.appendData(data);
-            }
-        },
-        // 展开/折叠指定的行
-        toggleRow: function(target, id) {
-            target.toggleRow(id);
-        },
-        // 展开指定的行
-        expandRow: function(target, id) {
-            target.expandRow(id);
-        },
-        // 折叠 指定的行
-        collapseRow: function(target, id) {
-            target.collapseRow(id);
-        },
-        // 展开所有的行
-        expandAll: function(target) {
-            target.expandAll();
-        },
-        // 折叠所有的行
-        collapseAll: function(target) {
-            target.collapseAll();
-        },
-        // 显示指定列
-        showColumn: function(target,field) {
-            target.showColumn(field,true);
-        },
-        // 隐藏指定列
-        hideColumn: function(target,field) {
-            target.hideColumn(field,true);
-        }
-        // 组件的其他方法也可以进行类似封装........
-    };
-
-    $.fn.bootstrapTreeTable.defaults = {
-        id: 'id',                // 选取记录返回的值,用于设置父子关系
-        parentId: 'parentId',    // 用于设置父子关系
-        rootIdValue: null,       // 设置根节点id值----可指定根节点,默认为null,"",0,"0"
-        data: null,              // 构造table的数据集合
-        type: "GET",             // 请求数据的ajax类型
-        url: null,               // 请求数据的ajax的url
-        ajaxParams: {},          // 请求数据的ajax的data属性
-        expandColumn: 0,         // 在哪一列上面显示展开按钮
-        expandAll: false,        // 是否全部展开
-        expandFirst: true,       // 是否默认第一级展开--expandAll为false时生效
-        striped: false,          // 是否各行渐变色
-        bordered: true,          // 是否显示边框
-        hover: true,             // 是否鼠标悬停
-        condensed: false,        // 是否紧缩表格
-        columns: [],             // 列
-        toolbar: null,           // 顶部工具条
-        height: 0,               // 表格高度
-        showTitle: true,         // 是否采用title属性显示字段内容(被formatter格式化的字段不会显示)
-        showColumns: true,       // 是否显示内容列下拉框
-        showRefresh: true,       // 是否显示刷新按钮
-        expanderExpandedClass: 'glyphicon glyphicon-chevron-down', // 展开的按钮的图标
-        expanderCollapsedClass: 'glyphicon glyphicon-chevron-right' // 缩起的按钮的图标
-
-    };
+/**
+ * bootstrapTreeTable
+ *
+ * @author swifly
+ */
+(function($) {
+    "use strict";
+
+    $.fn.bootstrapTreeTable = function(options, param) {
+        var target = $(this).data('bootstrap.tree.table');
+        target = target ? target : $(this);
+        // 如果是调用方法
+        if (typeof options == 'string') {
+            return $.fn.bootstrapTreeTable.methods[options](target, param);
+        }
+        // 如果是初始化组件
+        options = $.extend({}, $.fn.bootstrapTreeTable.defaults, options || {});
+        target.hasSelectItem = false;// 是否有radio或checkbox
+        target.data_list = null; //用于缓存格式化后的数据-按父分组
+        target.data_obj = null; //用于缓存格式化后的数据-按id存对象
+        target.hiddenColumns = []; //用于存放被隐藏列的field
+        target.lastAjaxParams; //用户最后一次请求的参数
+        target.isFixWidth=false; //是否有固定宽度
+        // 初始化
+        var init = function() {
+            // 初始化容器
+            initContainer();
+            // 初始化工具栏
+            initToolbar();
+            // 初始化表头
+            initHeader();
+            // 初始化表体
+            initBody();
+            // 初始化数据服务
+            initServer();
+            // 动态设置表头宽度
+            autoTheadWidth(true);
+            // 缓存target对象
+            target.data('bootstrap.tree.table', target);
+        }
+        // 初始化容器
+        var initContainer = function() {
+            // 在外层包装一下div,样式用的bootstrap-table的
+            var $main_div = $("<div class='bootstrap-tree-table'></div>");
+            var $treetable = $("<div class='treetable-table'></div>");
+            target.before($main_div);
+            $main_div.append($treetable);
+            $treetable.append(target);
+            target.addClass("table");
+            if (options.striped) {
+                target.addClass('table-striped');
+            }
+            if (options.bordered) {
+                target.addClass('table-bordered');
+            }
+            if (options.hover) {
+                target.addClass('table-hover');
+            }
+            if (options.condensed) {
+                target.addClass('table-condensed');
+            }
+            target.html("");
+        }
+        // 初始化工具栏
+        var initToolbar = function() {
+            var $toolbar = $("<div class='treetable-bars'></div>");
+            if (options.toolbar) {
+                $(options.toolbar).addClass('tool-left');
+                $toolbar.append($(options.toolbar));
+            }
+            var $rightToolbar = $('<div class="btn-group tool-right">');
+            $toolbar.append($rightToolbar);
+            target.parent().before($toolbar);
+            // 是否显示刷新按钮
+            if (options.showRefresh) {
+                var $refreshBtn = $('<button class="btn btn-default btn-outline" type="button" aria-label="refresh" title="刷新"><i class="glyphicon glyphicon-repeat"></i></button>');
+                $rightToolbar.append($refreshBtn);
+                registerRefreshBtnClickEvent($refreshBtn);
+            }
+            // 是否显示列选项
+            if (options.showColumns) {
+                var $columns_div = $('<div class="btn-group pull-right" title="列"><button type="button" aria-label="columns" class="btn btn-default btn-outline dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="glyphicon glyphicon-list"></i> <span class="caret"></span></button></div>');
+                var $columns_ul = $('<ul class="dropdown-menu columns" role="menu"></ul>');
+                $.each(options.columns, function(i, column) {
+                    if (column.field != 'selectItem') {
+                        var _li = null;
+                        if(typeof column.visible == "undefined"||column.visible==true){
+                            _li = $('<li role="menuitem"><label><input type="checkbox" checked="checked" data-field="'+column.field+'" value="'+column.field+'" > '+column.title+'</label></li>');
+                        }else{
+                            _li = $('<li role="menuitem"><label><input type="checkbox" data-field="'+column.field+'" value="'+column.field+'" > '+column.title+'</label></li>');
+                            target.hiddenColumns.push(column.field);
+                        }
+                        $columns_ul.append(_li);
+                    }
+                });
+                $columns_div.append($columns_ul);
+                $rightToolbar.append($columns_div);
+                // 注册列选项事件
+                registerColumnClickEvent();
+            }else{
+                $.each(options.columns, function(i, column) {
+                    if (column.field != 'selectItem') {
+                        if(!(typeof column.visible == "undefined"||column.visible==true)){
+                            target.hiddenColumns.push(column.field);
+                        }
+                    }
+                });
+            }
+        }
+        // 初始化隐藏列
+        var initHiddenColumns = function(){
+            $.each(target.hiddenColumns, function(i, field) {
+                target.find("."+field+"_cls").hide();
+            });
+        }
+        // 初始化表头
+        var initHeader = function() {
+            var $thr = $('<tr></tr>');
+            $.each(options.columns, function(i, column) {
+                var $th = null;
+                // 判断有没有选择列
+                if (i == 0 && column.field == 'selectItem') {
+                    target.hasSelectItem = true;
+                    $th = $('<th style="width:36px"></th>');
+                } else {
+                    $th = $('<th style="' + ((column.width) ? ('width:' + column.width) : '') + '" class="' + column.field + '_cls"></th>');
+                }
+                if((!target.isFixWidth)&& column.width){
+                    target.isFixWidth = column.width.indexOf("px")>-1?true:false;
+                }
+                $th.text(column.title);
+                $thr.append($th);
+            });
+            var $thead = $('<thead class="treetable-thead"></thead>');
+            $thead.append($thr);
+            target.append($thead);
+        }
+        // 初始化表体
+        var initBody = function() {
+            var $tbody = $('<tbody class="treetable-tbody"></tbody>');
+            target.append($tbody);
+            // 默认高度
+            if (options.height) {
+                $tbody.css("height", options.height);
+            }
+        }
+        // 初始化数据服务
+        var initServer = function(parms) {
+            // 加载数据前先清空
+            target.data_list = {};
+            target.data_obj = {};
+            var $tbody = target.find("tbody");
+            // 添加加载loading
+            var $loading = '<tr><td colspan="' + options.columns.length + '"><div style="display: block;text-align: center;">正在努力地加载数据中,请稍候……</div></td></tr>'
+            $tbody.html($loading);
+            if (options.url) {
+                $.ajax({
+                    type: options.type,
+                    url: options.url,
+                    data: parms ? parms : options.ajaxParams,
+                    dataType: "JSON",
+                    success: function(data, textStatus, jqXHR) {
+                        renderTable(data);
+                    },
+                    error: function(xhr, textStatus) {
+                        var _errorMsg = '<tr><td colspan="' + options.columns.length + '"><div style="display: block;text-align: center;">' + xhr.responseText + '</div></td></tr>'
+                        $tbody.html(_errorMsg);
+                    },
+                });
+            } else {
+                renderTable(options.data);
+            }
+        }
+        // 加载完数据后渲染表格
+        var renderTable = function(data) {
+            var $tbody = target.find("tbody");
+            // 先清空
+            $tbody.html("");
+            if (!data || data.length <= 0) {
+                var _empty = '<tr><td colspan="' + options.columns.length + '"><div style="display: block;text-align: center;">没有找到匹配的记录</div></td></tr>'
+                $tbody.html(_empty);
+                return;
+            }
+            // 缓存并格式化数据
+            formatData(data);
+            // 获取所有根节点
+            var rootNode = target.data_list["_root_"];
+            // 开始绘制
+            if (rootNode) {
+                $.each(rootNode, function(i, item) {
+                    var _child_row_id = "row_id_" + i
+                    recursionNode(item, 1, _child_row_id, "row_root");
+                });
+            }
+            // 下边的操作主要是为了查询时让一些没有根节点的节点显示
+            $.each(data, function(i, item) {
+                if (!item.isShow) {
+                    var tr = renderRow(item, false, 1, "", "");
+                    $tbody.append(tr);
+                }
+            });
+            target.append($tbody);
+            registerExpanderEvent();
+            registerRowClickEvent();
+            initHiddenColumns();
+            // 动态设置表头宽度
+            autoTheadWidth()
+        }
+        // 动态设置表头宽度
+        var autoTheadWidth = function(initFlag) {
+            if(options.height>0){
+                var $thead = target.find("thead");
+                var $tbody = target.find("tbody");
+                var borderWidth = parseInt(target.css("border-left-width")) + parseInt(target.css("border-right-width"))
+                
+                $thead.css("width", $tbody.children(":first").width());
+                if(initFlag){
+                    var resizeWaiter = false;
+                    $(window).resize(function() {
+                        if(!resizeWaiter){
+                            resizeWaiter = true;
+                            setTimeout(function(){
+                                if(!target.isFixWidth){
+                                    $tbody.css("width", target.parent().width()-borderWidth);
+                                }
+                                $thead.css("width", $tbody.children(":first").width());
+                                resizeWaiter = false;
+                            }, 300);
+                        }
+                    });
+                }
+            }
+        
+        }
+        // 缓存并格式化数据
+        var formatData = function(data) {
+            var _root = options.rootIdValue ? options.rootIdValue : null
+            $.each(data, function(index, item) {
+                // 添加一个默认属性,用来判断当前节点有没有被显示
+                item.isShow = false;
+                // 这里兼容几种常见Root节点写法
+                // 默认的几种判断
+                var _defaultRootFlag = item[options.parentId] == '0' ||
+                    item[options.parentId] == 0 ||
+                    item[options.parentId] == null ||
+                    item[options.parentId] == '';
+                if (!item[options.parentId] || (_root ? (item[options.parentId] == options.rootIdValue) : _defaultRootFlag)) {
+                    if (!target.data_list["_root_"]) {
+                        target.data_list["_root_"] = [];
+                    }
+                    if (!target.data_obj["id_" + item[options.id]]) {
+                        target.data_list["_root_"].push(item);
+                    }
+                } else {
+                    if (!target.data_list["_n_" + item[options.parentId]]) {
+                        target.data_list["_n_" + item[options.parentId]] = [];
+                    }
+                    if (!target.data_obj["id_" + item[options.id]]) {
+                        target.data_list["_n_" + item[options.parentId]].push(item);
+                    }
+                }
+                target.data_obj["id_" + item[options.id]] = item;
+            });
+        }
+        // 递归获取子节点并且设置子节点
+        var recursionNode = function(parentNode, lv, row_id, p_id) {
+            var $tbody = target.find("tbody");
+            var _ls = target.data_list["_n_" + parentNode[options.id]];
+            var $tr = renderRow(parentNode, _ls ? true : false, lv, row_id, p_id);
+            $tbody.append($tr);
+            if (_ls) {
+                $.each(_ls, function(i, item) {
+                    var _child_row_id = row_id + "_" + i
+                    recursionNode(item, (lv + 1), _child_row_id, row_id)
+                });
+            }
+        };
+        // 绘制行
+        var renderRow = function(item, isP, lv, row_id, p_id) {
+            // 标记已显示
+            item.isShow = true;
+            item.row_id = row_id;
+            item.p_id = p_id;
+            item.lv = lv;
+            var $tr = $('<tr id="' + row_id + '" pid="' + p_id + '"></tr>');
+            var _icon = options.expanderCollapsedClass;
+            if (options.expandAll) {
+                $tr.css("display", "table");
+                _icon = options.expanderExpandedClass;
+            } else if (lv == 1) {
+                $tr.css("display", "table");
+                _icon = (options.expandFirst) ? options.expanderExpandedClass : options.expanderCollapsedClass;
+            } else if (lv == 2) {
+                if (options.expandFirst) {
+                    $tr.css("display", "table");
+                } else {
+                    $tr.css("display", "none");
+                }
+                _icon = options.expanderCollapsedClass;
+            } else {
+                $tr.css("display", "none");
+                _icon = options.expanderCollapsedClass;
+            }
+            $.each(options.columns, function(index, column) {
+                // 判断有没有选择列
+                if (column.field == 'selectItem') {
+                    target.hasSelectItem = true;
+                    var $td = $('<td style="text-align:center;width:36px"></td>');
+                    if (column.radio) {
+                        var _ipt = $('<input name="select_item" type="radio" value="' + item[options.id] + '"></input>');
+                        $td.append(_ipt);
+                    }
+                    if (column.checkbox) {
+                        var _ipt = $('<input name="select_item" type="checkbox" value="' + item[options.id] + '"></input>');
+                        $td.append(_ipt);
+                    }
+                    $tr.append($td);
+                } else {
+                    var $td = $('<td name="' + column.field + '" class="' + column.field + '_cls"></td>');
+                    if(column.width){
+                        $td.css("width",column.width);
+                    }
+                    if(column.align){
+                        $td.css("text-align",column.align);
+                    }
+                    if(options.expandColumn == index){
+                        $td.css("text-align","left");
+                    }
+                    if(column.valign){
+                        $td.css("vertical-align",column.valign);
+                    }
+                    if(options.showTitle){
+                        $td.addClass("ellipsis");
+                    }
+                    // 增加formatter渲染
+                    if (column.formatter) {
+                        $td.html(column.formatter.call(this, item[column.field], item, index));
+                    } else {
+                        if(options.showTitle){
+                            // 只在字段没有formatter时才添加title属性
+                            $td.attr("title",item[column.field]);
+                        }
+                        $td.text(item[column.field]);
+                    }
+                    if (options.expandColumn == index) {
+                        if (!isP) {
+                            $td.prepend('<span class="treetable-expander"></span>')
+                        } else {
+                            $td.prepend('<span class="treetable-expander ' + _icon + '"></span>')
+                        }
+                        for (var int = 0; int < (lv - 1); int++) {
+                            $td.prepend('<span class="treetable-indent"></span>')
+                        }
+                    }
+                    $tr.append($td);
+                }
+            });
+            return $tr;
+        }
+        // 注册刷新按钮点击事件
+        var registerRefreshBtnClickEvent = function(btn) {
+            $(btn).off('click').on('click', function () {
+                target.refresh();
+            });
+        }
+        // 注册列选项事件
+        var registerColumnClickEvent = function() {
+            $(".bootstrap-tree-table .treetable-bars .columns label input").off('click').on('click', function () {
+                var $this = $(this);
+                if($this.prop('checked')){
+                    target.showColumn($(this).val());
+                }else{
+                    target.hideColumn($(this).val());
+                }
+            });
+        }
+        // 注册行点击选中事件
+        var registerRowClickEvent = function() {
+            target.find("tbody").find("tr").unbind();
+            target.find("tbody").find("tr").click(function() {
+                if (target.hasSelectItem) {
+                    var _ipt = $(this).find("input[name='select_item']");
+                    if (_ipt.attr("type") == "radio") {
+                        _ipt.prop('checked', true);
+                        target.find("tbody").find("tr").removeClass("treetable-selected");
+                        $(this).addClass("treetable-selected");
+                    } else {
+                        if (_ipt.prop('checked')) {
+                            _ipt.prop('checked', false);
+                            $(this).removeClass("treetable-selected");
+                        } else {
+                            _ipt.prop('checked', true);
+                            $(this).addClass("treetable-selected");
+                        }
+                    }
+                }
+            });
+        }
+        // 注册小图标点击事件--展开缩起
+        var registerExpanderEvent = function() {
+            target.find("tbody").find("tr").find(".treetable-expander").unbind();
+            target.find("tbody").find("tr").find(".treetable-expander").click(function() {
+                var _isExpanded = $(this).hasClass(options.expanderExpandedClass);
+                var _isCollapsed = $(this).hasClass(options.expanderCollapsedClass);
+                if (_isExpanded || _isCollapsed) {
+                    var tr = $(this).parent().parent();
+                    var row_id = tr.attr("id");
+                    var _ls = target.find("tbody").find("tr[id^='" + row_id + "_']"); //下所有
+                    if (_isExpanded) {
+                        $(this).removeClass(options.expanderExpandedClass);
+                        $(this).addClass(options.expanderCollapsedClass);
+                        if (_ls && _ls.length > 0) {
+                            $.each(_ls, function(index, item) {
+                                $(item).css("display", "none");
+                            });
+                        }
+                    } else {
+                        $(this).removeClass(options.expanderCollapsedClass);
+                        $(this).addClass(options.expanderExpandedClass);
+                        if (_ls && _ls.length > 0) {
+                            $.each(_ls, function(index, item) {
+                                // 父icon
+                                var _p_icon = $("#" + $(item).attr("pid")).children().eq(options.expandColumn).find(".treetable-expander");
+                                if (_p_icon.hasClass(options.expanderExpandedClass)) {
+                                    $(item).css("display", "table");
+                                }
+                            });
+                        }
+                    }
+                }
+            });
+        }
+        // 刷新数据
+        target.refresh = function(parms) {
+            if(parms){
+                target.lastAjaxParams=parms;
+            }
+            initServer(target.lastAjaxParams);
+        }
+        // 添加数据刷新表格
+        target.appendData = function(data) {
+            // 下边的操作主要是为了查询时让一些没有根节点的节点显示
+            $.each(data, function(i, item) {
+                var _data = target.data_obj["id_" + item[options.id]];
+                var _p_data = target.data_obj["id_" + item[options.parentId]];
+                var _c_list = target.data_list["_n_" + item[options.parentId]];
+                var row_id = ""; //行id
+                var p_id = ""; //父行id
+                var _lv = 1; //如果没有父就是1默认显示
+                var tr; //要添加行的对象
+                if (_data && _data.row_id && _data.row_id != "") {
+                    row_id = _data.row_id; // 如果已经存在了,就直接引用原来的
+                }
+                if (_p_data) {
+                    p_id = _p_data.row_id;
+                    if (row_id == "") {
+                        var _tmp = 0
+                        if (_c_list && _c_list.length > 0) {
+                            _tmp = _c_list.length;
+                        }
+                        row_id = _p_data.row_id + "_" + _tmp;
+                    }
+                    _lv = _p_data.lv + 1; //如果有父
+                    // 绘制行
+                    tr = renderRow(item, false, _lv, row_id, p_id);
+
+                    var _p_icon = $("#" + _p_data.row_id).children().eq(options.expandColumn).find(".treetable-expander");
+                    var _isExpanded = _p_icon.hasClass(options.expanderExpandedClass);
+                    var _isCollapsed = _p_icon.hasClass(options.expanderCollapsedClass);
+                    // 父节点有没有展开收缩按钮
+                    if (_isExpanded || _isCollapsed) {
+                        // 父节点展开状态显示新加行
+                        if (_isExpanded) {
+                            tr.css("display", "table");
+                        }
+                    } else {
+                        // 父节点没有展开收缩按钮则添加
+                        _p_icon.addClass(options.expanderCollapsedClass);
+                    }
+
+                    if (_data) {
+                        $("#" + _data.row_id).before(tr);
+                        $("#" + _data.row_id).remove();
+                    } else {
+                        // 计算父的同级下一行
+                        var _tmp_ls = _p_data.row_id.split("_");
+                        var _p_next = _p_data.row_id.substring(0, _p_data.row_id.length - 1) + (parseInt(_tmp_ls[_tmp_ls.length - 1]) + 1);
+                        // 画上
+                        $("#" + _p_next).before(tr);
+                    }
+                } else {
+                    tr = renderRow(item, false, _lv, row_id, p_id);
+                    if (_data) {
+                        $("#" + _data.row_id).before(tr);
+                        $("#" + _data.row_id).remove();
+                    } else {
+                        // 画上
+                        var tbody = target.find("tbody");
+                        tbody.append(tr);
+                    }
+                }
+                item.isShow = true;
+                // 缓存并格式化数据
+                formatData([item]);
+            });
+            registerExpanderEvent();
+            registerRowClickEvent();
+            initHiddenColumns();
+        }
+
+        // 展开/折叠指定的行
+        target.toggleRow=function(id) {
+            var _rowData = target.data_obj["id_" + id];
+            var $row_expander = $("#"+_rowData.row_id).find(".treetable-expander");
+            $row_expander.trigger("click");
+        }
+        // 展开指定的行
+        target.expandRow=function(id) {
+            var _rowData = target.data_obj["id_" + id];
+            var $row_expander = $("#"+_rowData.row_id).find(".treetable-expander");
+            var _isCollapsed = $row_expander.hasClass(target.options.expanderCollapsedClass);
+            if (_isCollapsed) {
+                $row_expander.trigger("click");
+            }
+        }
+        // 折叠 指定的行
+        target.collapseRow=function(id) {
+            var _rowData = target.data_obj["id_" + id];
+            var $row_expander = $("#"+_rowData.row_id).find(".treetable-expander");
+            var _isExpanded = $row_expander.hasClass(target.options.expanderExpandedClass);
+            if (_isExpanded) {
+                $row_expander.trigger("click");
+            }
+        }
+        // 展开所有的行
+        target.expandAll=function() {
+            target.find("tbody").find("tr").find(".treetable-expander").each(function(i,n){
+                var _isCollapsed = $(n).hasClass(options.expanderCollapsedClass);
+                if (_isCollapsed) {
+                    $(n).trigger("click");
+                }
+            })
+        }
+        // 折叠所有的行
+        target.collapseAll=function() {
+            target.find("tbody").find("tr").find(".treetable-expander").each(function(i,n){
+                var _isExpanded = $(n).hasClass(options.expanderExpandedClass);
+                if (_isExpanded) {
+                    $(n).trigger("click");
+                }
+            })
+        }
+        // 显示指定列
+        target.showColumn=function(field,flag) {
+            var _index = $.inArray(field, target.hiddenColumns);
+            if (_index > -1) {
+                target.hiddenColumns.splice(_index, 1);
+            }
+            target.find("."+field+"_cls").show();
+            //是否更新列选项状态
+            if(flag&&options.showColumns){
+                var $input = $(".bootstrap-tree-table .treetable-bars .columns label").find("input[value='"+field+"']")
+                $input.prop("checked", 'checked');
+            }
+        }
+        // 隐藏指定列
+        target.hideColumn=function(field,flag) {
+            target.hiddenColumns.push(field);
+            target.find("."+field+"_cls").hide();
+            //是否更新列选项状态
+            if(flag&&options.showColumns){
+                var $input = $(".bootstrap-tree-table .treetable-bars .columns label").find("input[value='"+field+"']")
+                $input.prop("checked", '');
+            }
+        }
+        // 初始化
+        init();
+        return target;
+    };
+
+    // 组件方法封装........
+    $.fn.bootstrapTreeTable.methods = {
+        // 为了兼容bootstrap-table的写法,统一返回数组,这里返回了表格显示列的数据
+        getSelections: function(target, data) {
+            // 所有被选中的记录input
+            var _ipt = target.find("tbody").find("tr").find("input[name='select_item']:checked");
+            var chk_value = [];
+            // 如果是radio
+            if (_ipt.attr("type") == "radio") {
+                var _data = target.data_obj["id_" + _ipt.val()];
+                chk_value.push(_data);
+            } else {
+                _ipt.each(function(_i, _item) {
+                    var _data = target.data_obj["id_" + $(_item).val()];
+                    chk_value.push(_data);
+                });
+            }
+            return chk_value;
+        },
+        // 刷新记录
+        refresh: function(target, parms) {
+            if (parms) {
+                target.refresh(parms);
+            } else {
+                target.refresh();
+            }
+        },
+        // 添加数据到表格
+        appendData: function(target, data) {
+            if (data) {
+                target.appendData(data);
+            }
+        },
+        // 展开/折叠指定的行
+        toggleRow: function(target, id) {
+            target.toggleRow(id);
+        },
+        // 展开指定的行
+        expandRow: function(target, id) {
+            target.expandRow(id);
+        },
+        // 折叠 指定的行
+        collapseRow: function(target, id) {
+            target.collapseRow(id);
+        },
+        // 展开所有的行
+        expandAll: function(target) {
+            target.expandAll();
+        },
+        // 折叠所有的行
+        collapseAll: function(target) {
+            target.collapseAll();
+        },
+        // 显示指定列
+        showColumn: function(target,field) {
+            target.showColumn(field,true);
+        },
+        // 隐藏指定列
+        hideColumn: function(target,field) {
+            target.hideColumn(field,true);
+        }
+        // 组件的其他方法也可以进行类似封装........
+    };
+
+    $.fn.bootstrapTreeTable.defaults = {
+        id: 'id',                // 选取记录返回的值,用于设置父子关系
+        parentId: 'parentId',    // 用于设置父子关系
+        rootIdValue: null,       // 设置根节点id值----可指定根节点,默认为null,"",0,"0"
+        data: null,              // 构造table的数据集合
+        type: "GET",             // 请求数据的ajax类型
+        url: null,               // 请求数据的ajax的url
+        ajaxParams: {},          // 请求数据的ajax的data属性
+        expandColumn: 0,         // 在哪一列上面显示展开按钮
+        expandAll: false,        // 是否全部展开
+        expandFirst: true,       // 是否默认第一级展开--expandAll为false时生效
+        striped: false,          // 是否各行渐变色
+        bordered: true,          // 是否显示边框
+        hover: true,             // 是否鼠标悬停
+        condensed: false,        // 是否紧缩表格
+        columns: [],             // 列
+        toolbar: null,           // 顶部工具条
+        height: 0,               // 表格高度
+        showTitle: true,         // 是否采用title属性显示字段内容(被formatter格式化的字段不会显示)
+        showColumns: true,       // 是否显示内容列下拉框
+        showRefresh: true,       // 是否显示刷新按钮
+        expanderExpandedClass: 'glyphicon glyphicon-chevron-down', // 展开的按钮的图标
+        expanderCollapsedClass: 'glyphicon glyphicon-chevron-right' // 缩起的按钮的图标
+
+    };
 })(jQuery);
\ No newline at end of file
diff --git a/src/main/resources/static/ajax/libs/cropbox/cropbox.css b/ruoyi-admin/src/main/resources/static/ajax/libs/cropbox/cropbox.css
similarity index 100%
rename from src/main/resources/static/ajax/libs/cropbox/cropbox.css
rename to ruoyi-admin/src/main/resources/static/ajax/libs/cropbox/cropbox.css
diff --git a/src/main/resources/static/ajax/libs/cropbox/cropbox.js b/ruoyi-admin/src/main/resources/static/ajax/libs/cropbox/cropbox.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/cropbox/cropbox.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/cropbox/cropbox.js
diff --git a/src/main/resources/static/ajax/libs/datapicker/bootstrap-datepicker.js b/ruoyi-admin/src/main/resources/static/ajax/libs/datapicker/bootstrap-datepicker.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/datapicker/bootstrap-datepicker.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/datapicker/bootstrap-datepicker.js
diff --git a/src/main/resources/static/ajax/libs/datapicker/datepicker3.css b/ruoyi-admin/src/main/resources/static/ajax/libs/datapicker/datepicker3.css
similarity index 100%
rename from src/main/resources/static/ajax/libs/datapicker/datepicker3.css
rename to ruoyi-admin/src/main/resources/static/ajax/libs/datapicker/datepicker3.css
diff --git a/src/main/resources/static/ajax/libs/fullscreen/jquery.fullscreen.js b/ruoyi-admin/src/main/resources/static/ajax/libs/fullscreen/jquery.fullscreen.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/fullscreen/jquery.fullscreen.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/fullscreen/jquery.fullscreen.js
diff --git a/src/main/resources/static/ajax/libs/iCheck/custom.css b/ruoyi-admin/src/main/resources/static/ajax/libs/iCheck/custom.css
similarity index 100%
rename from src/main/resources/static/ajax/libs/iCheck/custom.css
rename to ruoyi-admin/src/main/resources/static/ajax/libs/iCheck/custom.css
diff --git a/src/main/resources/static/ajax/libs/iCheck/green-login.png b/ruoyi-admin/src/main/resources/static/ajax/libs/iCheck/green-login.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/iCheck/green-login.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/iCheck/green-login.png
diff --git a/src/main/resources/static/ajax/libs/iCheck/green.png b/ruoyi-admin/src/main/resources/static/ajax/libs/iCheck/green.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/iCheck/green.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/iCheck/green.png
diff --git a/src/main/resources/static/ajax/libs/iCheck/green@2x.png b/ruoyi-admin/src/main/resources/static/ajax/libs/iCheck/green@2x.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/iCheck/green@2x.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/iCheck/green@2x.png
diff --git a/src/main/resources/static/ajax/libs/iCheck/icheck.min.js b/ruoyi-admin/src/main/resources/static/ajax/libs/iCheck/icheck.min.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/iCheck/icheck.min.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/iCheck/icheck.min.js
diff --git a/src/main/resources/static/ajax/libs/jquery-layout/jquery.layout-latest.css b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-layout/jquery.layout-latest.css
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-layout/jquery.layout-latest.css
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-layout/jquery.layout-latest.css
diff --git a/src/main/resources/static/ajax/libs/jquery-layout/jquery.layout-latest.js b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-layout/jquery.layout-latest.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-layout/jquery.layout-latest.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-layout/jquery.layout-latest.js
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/1_close.png b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/1_close.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/1_close.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/1_close.png
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/1_open.png b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/1_open.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/1_open.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/1_open.png
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/2.png b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/2.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/2.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/2.png
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/3.png b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/3.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/3.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/3.png
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/4.png b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/4.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/4.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/4.png
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/5.png b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/5.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/5.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/5.png
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/6.png b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/6.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/6.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/6.png
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/7.png b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/7.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/7.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/7.png
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/8.png b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/8.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/8.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/8.png
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/9.png b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/9.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/9.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/diy/9.png
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/line_conn.gif b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/line_conn.gif
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/line_conn.gif
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/line_conn.gif
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/loading.gif b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/loading.gif
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/loading.gif
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/loading.gif
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/zTreeStandard.gif b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/zTreeStandard.gif
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/zTreeStandard.gif
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/zTreeStandard.gif
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/zTreeStandard.png b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/zTreeStandard.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/zTreeStandard.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/img/zTreeStandard.png
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/zTreeStyle.css b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/zTreeStyle.css
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/zTreeStyle.css
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/default/zTreeStyle.css
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/line_conn.gif b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/line_conn.gif
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/line_conn.gif
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/line_conn.gif
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/line_conn.png b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/line_conn.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/line_conn.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/line_conn.png
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/loading.gif b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/loading.gif
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/loading.gif
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/loading.gif
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/metro.gif b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/metro.gif
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/metro.gif
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/metro.gif
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/metro.png b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/metro.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/metro.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/img/metro.png
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/metro/zTreeStyle.css
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/left_menu.gif b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/left_menu.gif
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/left_menu.gif
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/left_menu.gif
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/left_menu.png b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/left_menu.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/left_menu.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/left_menu.png
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/line_conn.gif b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/line_conn.gif
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/line_conn.gif
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/line_conn.gif
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/loading.gif b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/loading.gif
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/loading.gif
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/loading.gif
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/zTreeStandard.gif b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/zTreeStandard.gif
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/zTreeStandard.gif
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/zTreeStandard.gif
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/zTreeStandard.png b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/zTreeStandard.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/zTreeStandard.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/img/zTreeStandard.png
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/zTreeStyle.css b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/zTreeStyle.css
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/zTreeStyle.css
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/css/simple/zTreeStyle.css
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.all-3.5.js
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.core-3.5.js b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.core-3.5.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.core-3.5.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.core-3.5.js
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.excheck-3.5.js b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.excheck-3.5.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.excheck-3.5.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.excheck-3.5.js
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.exedit-3.5.js b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.exedit-3.5.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.exedit-3.5.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.exedit-3.5.js
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.exhide-3.5.js b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.exhide-3.5.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.exhide-3.5.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/js/jquery.ztree.exhide-3.5.js
diff --git a/src/main/resources/static/ajax/libs/jquery-ztree/3.5/log v3.x.txt b/ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/log v3.x.txt
similarity index 100%
rename from src/main/resources/static/ajax/libs/jquery-ztree/3.5/log v3.x.txt
rename to ruoyi-admin/src/main/resources/static/ajax/libs/jquery-ztree/3.5/log v3.x.txt
diff --git a/src/main/resources/static/ajax/libs/layer/layer.min.js b/ruoyi-admin/src/main/resources/static/ajax/libs/layer/layer.min.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/layer/layer.min.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/layer/layer.min.js
diff --git a/src/main/resources/static/ajax/libs/layer/theme/default/icon-ext.png b/ruoyi-admin/src/main/resources/static/ajax/libs/layer/theme/default/icon-ext.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/layer/theme/default/icon-ext.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/layer/theme/default/icon-ext.png
diff --git a/src/main/resources/static/ajax/libs/layer/theme/default/icon.png b/ruoyi-admin/src/main/resources/static/ajax/libs/layer/theme/default/icon.png
similarity index 100%
rename from src/main/resources/static/ajax/libs/layer/theme/default/icon.png
rename to ruoyi-admin/src/main/resources/static/ajax/libs/layer/theme/default/icon.png
diff --git a/src/main/resources/static/ajax/libs/layer/theme/default/layer.css b/ruoyi-admin/src/main/resources/static/ajax/libs/layer/theme/default/layer.css
similarity index 100%
rename from src/main/resources/static/ajax/libs/layer/theme/default/layer.css
rename to ruoyi-admin/src/main/resources/static/ajax/libs/layer/theme/default/layer.css
diff --git a/src/main/resources/static/ajax/libs/layer/theme/default/loading-0.gif b/ruoyi-admin/src/main/resources/static/ajax/libs/layer/theme/default/loading-0.gif
similarity index 100%
rename from src/main/resources/static/ajax/libs/layer/theme/default/loading-0.gif
rename to ruoyi-admin/src/main/resources/static/ajax/libs/layer/theme/default/loading-0.gif
diff --git a/src/main/resources/static/ajax/libs/layer/theme/default/loading-1.gif b/ruoyi-admin/src/main/resources/static/ajax/libs/layer/theme/default/loading-1.gif
similarity index 100%
rename from src/main/resources/static/ajax/libs/layer/theme/default/loading-1.gif
rename to ruoyi-admin/src/main/resources/static/ajax/libs/layer/theme/default/loading-1.gif
diff --git a/src/main/resources/static/ajax/libs/layer/theme/default/loading-2.gif b/ruoyi-admin/src/main/resources/static/ajax/libs/layer/theme/default/loading-2.gif
similarity index 100%
rename from src/main/resources/static/ajax/libs/layer/theme/default/loading-2.gif
rename to ruoyi-admin/src/main/resources/static/ajax/libs/layer/theme/default/loading-2.gif
diff --git a/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.eot b/ruoyi-admin/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.eot
similarity index 100%
rename from src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.eot
rename to ruoyi-admin/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.eot
diff --git a/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.svg b/ruoyi-admin/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.svg
similarity index 98%
rename from src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.svg
rename to ruoyi-admin/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.svg
index 1e04218f..788ecc69 100644
--- a/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.svg
+++ b/ruoyi-admin/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.svg
@@ -1,45 +1,45 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<!--
-2013-9-30: Created.
--->
-<svg>
-<metadata>
-Created by iconfont
-</metadata>
-<defs>
-
-<font id="laydate-icon" horiz-adv-x="1024" >
-  <font-face
-    font-family="laydate-icon"
-    font-weight="500"
-    font-stretch="normal"
-    units-per-em="1024"
-    ascent="896"
-    descent="-128"
-  />
-    <missing-glyph />
-    
-    <glyph glyph-name="x" unicode="x" horiz-adv-x="1001"
-d="M281 543q-27 -1 -53 -1h-83q-18 0 -36.5 -6t-32.5 -18.5t-23 -32t-9 -45.5v-76h912v41q0 16 -0.5 30t-0.5 18q0 13 -5 29t-17 29.5t-31.5 22.5t-49.5 9h-133v-97h-438v97zM955 310v-52q0 -23 0.5 -52t0.5 -58t-10.5 -47.5t-26 -30t-33 -16t-31.5 -4.5q-14 -1 -29.5 -0.5
-t-29.5 0.5h-32l-45 128h-439l-44 -128h-29h-34q-20 0 -45 1q-25 0 -41 9.5t-25.5 23t-13.5 29.5t-4 30v167h911zM163 247q-12 0 -21 -8.5t-9 -21.5t9 -21.5t21 -8.5q13 0 22 8.5t9 21.5t-9 21.5t-22 8.5zM316 123q-8 -26 -14 -48q-5 -19 -10.5 -37t-7.5 -25t-3 -15t1 -14.5
-t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-5 19 -11 39h-368zM336 498v228q0 11 2.5 23t10 21.5t20.5 15.5t34 6h188q31 0 51.5 -14.5t20.5 -52.5v-227h-327z" />
-    
-
-    
-    <glyph glyph-name="youyou" unicode="&#58882;" d="M283.648 721.918976 340.873216 780.926976 740.352 383.997952 340.876288-12.925952 283.648 46.077952 619.52 383.997952Z"  horiz-adv-x="1024" />
-
-    
-    <glyph glyph-name="zuozuo" unicode="&#58883;" d="M740.352 721.918976 683.126784 780.926976 283.648 383.997952 683.123712-12.925952 740.352 46.077952 404.48 383.997952Z"  horiz-adv-x="1024" />
-
-    
-    <glyph glyph-name="xiayiye" unicode="&#58970;" d="M62.573 384.103l423.401 423.662c18.985 18.985 49.757 18.985 68.727 0 18.982-18.972 18.985-49.746 0-68.729l-355.058-355.067 356.796-356.796c18.977-18.971 18.976-49.746 0-68.727-18.982-18.976-49.751-18.976-68.727 0l-39.753 39.753 0.269 0.246-385.655 385.661zM451.365 384.103l423.407 423.662c18.985 18.985 49.757 18.985 68.727 0 18.982-18.972 18.985-49.746 0-68.729l-355.058-355.067 356.796-356.796c18.977-18.971 18.976-49.746 0-68.727-18.982-18.976-49.757-18.977-68.727 0l-39.762 39.754 0.273 0.249-385.662 385.661zM451.365 384.103z"  horiz-adv-x="1024" />
-
-    
-    <glyph glyph-name="xiayiye1" unicode="&#58971;" d="M948.066926 382.958838l-411.990051-412.24426c-18.47333-18.47333-48.417689-18.47333-66.875207 0-18.47333 18.461167-18.47333 48.405526 0 66.875207L814.691135 383.088983 467.512212 730.269123c-18.466032 18.458735-18.466032 48.405526 0 66.873991 18.468465 18.464816 48.410391 18.464816 66.872774 0l38.682336-38.682336-0.261507-0.239614 375.259894-375.265975v0.003649m-378.312834 0L157.756743-29.285422c-18.47333-18.47333-48.415256-18.47333-66.872775 0-18.47333 18.461167-18.47333 48.405526 0 66.875207L436.369787 383.088983 89.19208 730.269123c-18.4636 18.458735-18.4636 48.405526 0 66.873991 18.470898 18.464816 48.415256 18.464816 66.872774 0l38.692067-38.682336-0.266372-0.239614 375.267191-375.265975-0.004865 0.003649m0 0z"  horiz-adv-x="1024" />
-
-    
-
-
-  </font>
-</defs></svg>
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<!--
+2013-9-30: Created.
+-->
+<svg>
+<metadata>
+Created by iconfont
+</metadata>
+<defs>
+
+<font id="laydate-icon" horiz-adv-x="1024" >
+  <font-face
+    font-family="laydate-icon"
+    font-weight="500"
+    font-stretch="normal"
+    units-per-em="1024"
+    ascent="896"
+    descent="-128"
+  />
+    <missing-glyph />
+    
+    <glyph glyph-name="x" unicode="x" horiz-adv-x="1001"
+d="M281 543q-27 -1 -53 -1h-83q-18 0 -36.5 -6t-32.5 -18.5t-23 -32t-9 -45.5v-76h912v41q0 16 -0.5 30t-0.5 18q0 13 -5 29t-17 29.5t-31.5 22.5t-49.5 9h-133v-97h-438v97zM955 310v-52q0 -23 0.5 -52t0.5 -58t-10.5 -47.5t-26 -30t-33 -16t-31.5 -4.5q-14 -1 -29.5 -0.5
+t-29.5 0.5h-32l-45 128h-439l-44 -128h-29h-34q-20 0 -45 1q-25 0 -41 9.5t-25.5 23t-13.5 29.5t-4 30v167h911zM163 247q-12 0 -21 -8.5t-9 -21.5t9 -21.5t21 -8.5q13 0 22 8.5t9 21.5t-9 21.5t-22 8.5zM316 123q-8 -26 -14 -48q-5 -19 -10.5 -37t-7.5 -25t-3 -15t1 -14.5
+t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q-5 19 -11 39h-368zM336 498v228q0 11 2.5 23t10 21.5t20.5 15.5t34 6h188q31 0 51.5 -14.5t20.5 -52.5v-227h-327z" />
+    
+
+    
+    <glyph glyph-name="youyou" unicode="&#58882;" d="M283.648 721.918976 340.873216 780.926976 740.352 383.997952 340.876288-12.925952 283.648 46.077952 619.52 383.997952Z"  horiz-adv-x="1024" />
+
+    
+    <glyph glyph-name="zuozuo" unicode="&#58883;" d="M740.352 721.918976 683.126784 780.926976 283.648 383.997952 683.123712-12.925952 740.352 46.077952 404.48 383.997952Z"  horiz-adv-x="1024" />
+
+    
+    <glyph glyph-name="xiayiye" unicode="&#58970;" d="M62.573 384.103l423.401 423.662c18.985 18.985 49.757 18.985 68.727 0 18.982-18.972 18.985-49.746 0-68.729l-355.058-355.067 356.796-356.796c18.977-18.971 18.976-49.746 0-68.727-18.982-18.976-49.751-18.976-68.727 0l-39.753 39.753 0.269 0.246-385.655 385.661zM451.365 384.103l423.407 423.662c18.985 18.985 49.757 18.985 68.727 0 18.982-18.972 18.985-49.746 0-68.729l-355.058-355.067 356.796-356.796c18.977-18.971 18.976-49.746 0-68.727-18.982-18.976-49.757-18.977-68.727 0l-39.762 39.754 0.273 0.249-385.662 385.661zM451.365 384.103z"  horiz-adv-x="1024" />
+
+    
+    <glyph glyph-name="xiayiye1" unicode="&#58971;" d="M948.066926 382.958838l-411.990051-412.24426c-18.47333-18.47333-48.417689-18.47333-66.875207 0-18.47333 18.461167-18.47333 48.405526 0 66.875207L814.691135 383.088983 467.512212 730.269123c-18.466032 18.458735-18.466032 48.405526 0 66.873991 18.468465 18.464816 48.410391 18.464816 66.872774 0l38.682336-38.682336-0.261507-0.239614 375.259894-375.265975v0.003649m-378.312834 0L157.756743-29.285422c-18.47333-18.47333-48.415256-18.47333-66.872775 0-18.47333 18.461167-18.47333 48.405526 0 66.875207L436.369787 383.088983 89.19208 730.269123c-18.4636 18.458735-18.4636 48.405526 0 66.873991 18.470898 18.464816 48.415256 18.464816 66.872774 0l38.692067-38.682336-0.266372-0.239614 375.267191-375.265975-0.004865 0.003649m0 0z"  horiz-adv-x="1024" />
+
+    
+
+
+  </font>
+</defs></svg>
diff --git a/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.ttf b/ruoyi-admin/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.ttf
similarity index 100%
rename from src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.ttf
rename to ruoyi-admin/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.ttf
diff --git a/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.woff b/ruoyi-admin/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.woff
similarity index 100%
rename from src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.woff
rename to ruoyi-admin/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/font/iconfont.woff
diff --git a/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/laydate.css b/ruoyi-admin/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/laydate.css
similarity index 99%
rename from src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/laydate.css
rename to ruoyi-admin/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/laydate.css
index c7e15086..407fe7e8 100644
--- a/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/laydate.css
+++ b/ruoyi-admin/src/main/resources/static/ajax/libs/layui/css/modules/laydate/default/laydate.css
@@ -1,2 +1,2 @@
-/*! laydate-v5.0.9 日期与时间组件 MIT License  http://www.layui.com/laydate/  By 贤心 */
+/*! laydate-v5.0.9 日期与时间组件 MIT License  http://www.layui.com/laydate/  By 贤心 */
 .laydate-set-ym,.layui-laydate,.layui-laydate *,.layui-laydate-list{box-sizing:border-box}html #layuicss-laydate{display:none;position:absolute;width:1989px}.layui-laydate *{margin:0;padding:0}.layui-laydate{position:absolute;z-index:66666666;margin:5px 0;border-radius:2px;font-size:14px;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:laydate-upbit;animation-name:laydate-upbit}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}@-webkit-keyframes laydate-upbit{from{-webkit-transform:translate3d(0,20px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes laydate-upbit{from{transform:translate3d(0,20px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-laydate-static{position:relative;z-index:0;display:inline-block;margin:0;-webkit-animation:none;animation:none}.laydate-ym-show .laydate-next-m,.laydate-ym-show .laydate-prev-m{display:none!important}.laydate-ym-show .laydate-next-y,.laydate-ym-show .laydate-prev-y{display:inline-block!important}.laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-time-show .layui-laydate-header .layui-icon,.laydate-ym-show .laydate-set-ym span[lay-type=month]{display:none!important}.layui-laydate-header{position:relative;line-height:30px;padding:10px 70px 5px}.laydate-set-ym span,.layui-laydate-header i{padding:0 5px;cursor:pointer}.layui-laydate-header *{display:inline-block;vertical-align:bottom}.layui-laydate-header i{position:absolute;top:10px;color:#999;font-size:18px}.layui-laydate-header i.laydate-prev-y{left:15px}.layui-laydate-header i.laydate-prev-m{left:45px}.layui-laydate-header i.laydate-next-y{right:15px}.layui-laydate-header i.laydate-next-m{right:45px}.laydate-set-ym{width:100%;text-align:center;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.laydate-time-text{cursor:default!important}.layui-laydate-content{position:relative;padding:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content table{border-collapse:collapse;border-spacing:0}.layui-laydate-content td,.layui-laydate-content th{width:36px;height:30px;padding:5px;text-align:center}.layui-laydate-content td{position:relative;cursor:pointer}.laydate-day-mark{position:absolute;left:0;top:0;width:100%;height:100%;line-height:30px;font-size:12px;overflow:hidden}.laydate-day-mark::after{position:absolute;content:'';right:2px;top:2px;width:5px;height:5px;border-radius:50%}.layui-laydate-footer{position:relative;height:46px;line-height:26px;padding:10px 20px}.layui-laydate-footer span{margin-right:15px;display:inline-block;cursor:pointer;font-size:12px}.layui-laydate-footer span:hover{color:#5FB878}.laydate-footer-btns{position:absolute;right:10px;top:10px}.laydate-footer-btns span{height:26px;line-height:26px;margin:0 0 0 -1px;padding:0 10px;border:1px solid #C9C9C9;background-color:#fff;white-space:nowrap;vertical-align:top;border-radius:2px}.layui-laydate-list>li,.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle}.layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;background-color:#fff}.layui-laydate-list>li{position:relative;width:33.3%;height:36px;line-height:36px;margin:3px 0;text-align:center;cursor:pointer}.laydate-month-list>li{width:25%;margin:17px 0}.laydate-time-list>li{height:100%;margin:0;line-height:normal;cursor:default}.laydate-time-list p{position:relative;top:-4px;line-height:29px}.laydate-time-list ol{height:181px;overflow:hidden}.laydate-time-list>li:hover ol{overflow-y:auto}.laydate-time-list ol li{width:130%;padding-left:33px;line-height:30px;text-align:left;cursor:pointer}.layui-laydate-hint{position:absolute;top:115px;left:50%;width:250px;margin-left:-125px;line-height:20px;padding:15px;text-align:center;font-size:12px}.layui-laydate-range{width:546px}.layui-laydate-range .laydate-main-list-0 .laydate-next-m,.layui-laydate-range .laydate-main-list-0 .laydate-next-y,.layui-laydate-range .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range .laydate-main-list-1 .laydate-prev-y{display:none}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left:1px solid #e2e2e2}.layui-laydate,.layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);background-color:#fff;color:#666}.layui-laydate-header{border-bottom:1px solid #e2e2e2}.layui-laydate-header i:hover,.layui-laydate-header span:hover{color:#5FB878}.layui-laydate-content{border-top:none 0;border-bottom:none 0}.layui-laydate-content th{font-weight:400;color:#333}.layui-laydate-content td{color:#666}.layui-laydate-content td.laydate-selected{background-color:#00F7DE}.laydate-selected:hover{background-color:#00F7DE!important}.layui-laydate-content td:hover,.layui-laydate-list li:hover{background-color:#eaeaea;color:#333}.laydate-time-list li ol{margin:0;padding:0;border:1px solid #e2e2e2;border-left-width:0}.laydate-time-list li:first-child ol{border-left-width:1px}.laydate-time-list>li:hover{background:0 0}.layui-laydate-content .laydate-day-next,.layui-laydate-content .laydate-day-prev{color:#d2d2d2}.laydate-selected.laydate-day-next,.laydate-selected.laydate-day-prev{background-color:#f8f8f8!important}.layui-laydate-footer{border-top:1px solid #e2e2e2}.layui-laydate-hint{color:#FF5722}.laydate-day-mark::after{background-color:#5FB878}.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none}.layui-laydate-footer span[lay-type=date]{color:#5FB878}.layui-laydate .layui-this{background-color:#009688!important;color:#fff!important}.layui-laydate .laydate-disabled,.layui-laydate .laydate-disabled:hover{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.laydate-theme-molv{border:none}.laydate-theme-molv.layui-laydate-range{width:548px}.laydate-theme-molv .layui-laydate-main{width:274px}.laydate-theme-molv .layui-laydate-header{border:none;background-color:#009688}.laydate-theme-molv .layui-laydate-header i,.laydate-theme-molv .layui-laydate-header span{color:#f6f6f6}.laydate-theme-molv .layui-laydate-header i:hover,.laydate-theme-molv .layui-laydate-header span:hover{color:#fff}.laydate-theme-molv .layui-laydate-content{border:1px solid #e2e2e2;border-top:none;border-bottom:none}.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left:none}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li,.laydate-theme-grid .layui-laydate-content td,.laydate-theme-grid .layui-laydate-content thead,.laydate-theme-molv .layui-laydate-footer{border:1px solid #e2e2e2}.laydate-theme-grid .laydate-selected,.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#009688!important}.laydate-theme-grid .laydate-selected.laydate-day-next,.laydate-theme-grid .laydate-selected.laydate-day-prev{color:#d2d2d2!important}.laydate-theme-grid .laydate-month-list,.laydate-theme-grid .laydate-year-list{margin:1px 0 0 1px}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li{margin:0 -1px -1px 0}.laydate-theme-grid .laydate-year-list>li{height:43px;line-height:43px}.laydate-theme-grid .laydate-month-list>li{height:71px;line-height:71px}@font-face{font-family:laydate-icon;src:url(font/iconfont.eot);src:url(font/iconfont.eot#iefix) format('embedded-opentype'),url(font/iconfont.svg#iconfont) format('svg'),url(font/iconfont.woff) format('woff'),url(font/iconfont.ttf) format('truetype')}.laydate-icon{font-family:laydate-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
\ No newline at end of file
diff --git a/src/main/resources/static/ajax/libs/layui/lay/modules/laydate.js b/ruoyi-admin/src/main/resources/static/ajax/libs/layui/lay/modules/laydate.js
similarity index 99%
rename from src/main/resources/static/ajax/libs/layui/lay/modules/laydate.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/layui/lay/modules/laydate.js
index cbf203d1..56fc54c5 100644
--- a/src/main/resources/static/ajax/libs/layui/lay/modules/laydate.js
+++ b/ruoyi-admin/src/main/resources/static/ajax/libs/layui/lay/modules/laydate.js
@@ -1,2 +1,2 @@
-/** layui-v5.0.9 日期与时间组件 MIT License By https://www.layui.com */
- ;!function(){"use strict";var e=window.layui&&layui.define,t={getPath:function(){var e=document.currentScript?document.currentScript.src:function(){for(var e,t=document.scripts,n=t.length-1,a=n;a>0;a--)if("interactive"===t[a].readyState){e=t[a].src;break}return e||t[n].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),getStyle:function(e,t){var n=e.currentStyle?e.currentStyle:window.getComputedStyle(e,null);return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](t)},link:function(e,a,i){if(n.path){var r=document.getElementsByTagName("head")[0],o=document.createElement("link");"string"==typeof a&&(i=a);var s=(i||e).replace(/\.|\//g,""),l="layuicss-"+s,d=0;o.rel="stylesheet",o.href=n.path+e,o.id=l,document.getElementById(l)||r.appendChild(o),"function"==typeof a&&!function c(){return++d>80?window.console&&console.error("laydate.css: Invalid"):void(1989===parseInt(t.getStyle(document.getElementById(l),"width"))?a():setTimeout(c,100))}()}}},n={v:"5.0.9",config:{},index:window.laydate&&window.laydate.v?1e5:0,path:t.getPath,set:function(e){var t=this;return t.config=w.extend({},t.config,e),t},ready:function(a){var i="laydate",r="",o=(e?"modules/laydate/":"theme/")+"default/laydate.css?v="+n.v+r;return e?layui.addcss(o,a,i):t.link(o,a,i),this}},a=function(){var e=this;return{hint:function(t){e.hint.call(e,t)},config:e.config}},i="laydate",r=".layui-laydate",o="layui-this",s="laydate-disabled",l="开始日期超出了结束日期<br>建议重新选择",d=[100,2e5],c="layui-laydate-static",m="layui-laydate-list",u="laydate-selected",h="layui-laydate-hint",y="laydate-day-prev",f="laydate-day-next",p="layui-laydate-footer",g=".laydate-btns-confirm",v="laydate-time-text",D=".laydate-btns-time",T=function(e){var t=this;t.index=++n.index,t.config=w.extend({},t.config,n.config,e),n.ready(function(){t.init()})},w=function(e){return new C(e)},C=function(e){for(var t=0,n="object"==typeof e?[e]:(this.selector=e,document.querySelectorAll(e||null));t<n.length;t++)this.push(n[t])};C.prototype=[],C.prototype.constructor=C,w.extend=function(){var e=1,t=arguments,n=function(e,t){e=e||(t.constructor===Array?[]:{});for(var a in t)e[a]=t[a]&&t[a].constructor===Object?n(e[a],t[a]):t[a];return e};for(t[0]="object"==typeof t[0]?t[0]:{};e<t.length;e++)"object"==typeof t[e]&&n(t[0],t[e]);return t[0]},w.ie=function(){var e=navigator.userAgent.toLowerCase();return!!(window.ActiveXObject||"ActiveXObject"in window)&&((e.match(/msie\s(\d+)/)||[])[1]||"11")}(),w.stope=function(e){e=e||window.event,e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},w.each=function(e,t){var n,a=this;if("function"!=typeof t)return a;if(e=e||[],e.constructor===Object){for(n in e)if(t.call(e[n],n,e[n]))break}else for(n=0;n<e.length&&!t.call(e[n],n,e[n]);n++);return a},w.digit=function(e,t,n){var a="";e=String(e),t=t||2;for(var i=e.length;i<t;i++)a+="0";return e<Math.pow(10,t)?a+(0|e):e},w.elem=function(e,t){var n=document.createElement(e);return w.each(t||{},function(e,t){n.setAttribute(e,t)}),n},C.addStr=function(e,t){return e=e.replace(/\s+/," "),t=t.replace(/\s+/," ").split(" "),w.each(t,function(t,n){new RegExp("\\b"+n+"\\b").test(e)||(e=e+" "+n)}),e.replace(/^\s|\s$/,"")},C.removeStr=function(e,t){return e=e.replace(/\s+/," "),t=t.replace(/\s+/," ").split(" "),w.each(t,function(t,n){var a=new RegExp("\\b"+n+"\\b");a.test(e)&&(e=e.replace(a,""))}),e.replace(/\s+/," ").replace(/^\s|\s$/,"")},C.prototype.find=function(e){var t=this,n=0,a=[],i="object"==typeof e;return this.each(function(r,o){for(var s=i?[e]:o.querySelectorAll(e||null);n<s.length;n++)a.push(s[n]);t.shift()}),i||(t.selector=(t.selector?t.selector+" ":"")+e),w.each(a,function(e,n){t.push(n)}),t},C.prototype.each=function(e){return w.each.call(this,this,e)},C.prototype.addClass=function(e,t){return this.each(function(n,a){a.className=C[t?"removeStr":"addStr"](a.className,e)})},C.prototype.removeClass=function(e){return this.addClass(e,!0)},C.prototype.hasClass=function(e){var t=!1;return this.each(function(n,a){new RegExp("\\b"+e+"\\b").test(a.className)&&(t=!0)}),t},C.prototype.attr=function(e,t){var n=this;return void 0===t?function(){if(n.length>0)return n[0].getAttribute(e)}():n.each(function(n,a){a.setAttribute(e,t)})},C.prototype.removeAttr=function(e){return this.each(function(t,n){n.removeAttribute(e)})},C.prototype.html=function(e){return this.each(function(t,n){n.innerHTML=e})},C.prototype.val=function(e){return this.each(function(t,n){n.value=e})},C.prototype.append=function(e){return this.each(function(t,n){"object"==typeof e?n.appendChild(e):n.innerHTML=n.innerHTML+e})},C.prototype.remove=function(e){return this.each(function(t,n){e?n.removeChild(e):n.parentNode.removeChild(n)})},C.prototype.on=function(e,t){return this.each(function(n,a){a.attachEvent?a.attachEvent("on"+e,function(e){e.target=e.srcElement,t.call(a,e)}):a.addEventListener(e,t,!1)})},C.prototype.off=function(e,t){return this.each(function(n,a){a.detachEvent?a.detachEvent("on"+e,t):a.removeEventListener(e,t,!1)})},T.isLeapYear=function(e){return e%4===0&&e%100!==0||e%400===0},T.prototype.config={type:"date",range:!1,format:"yyyy-MM-dd",value:null,min:"1900-1-1",max:"2099-12-31",trigger:"focus",show:!1,showBottom:!0,btns:["clear","now","confirm"],lang:"cn",theme:"default",position:null,calendar:!1,mark:{},zIndex:null,done:null,change:null},T.prototype.lang=function(){var e=this,t=e.config,n={cn:{weeks:["日","一","二","三","四","五","六"],time:["时","分","秒"],timeTips:"选择时间",startTime:"开始时间",endTime:"结束时间",dateTips:"返回日期",month:["一","二","三","四","五","六","七","八","九","十","十一","十二"],tools:{confirm:"确定",clear:"清空",now:"现在"}},en:{weeks:["Su","Mo","Tu","We","Th","Fr","Sa"],time:["Hours","Minutes","Seconds"],timeTips:"Select Time",startTime:"Start Time",endTime:"End Time",dateTips:"Select Date",month:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],tools:{confirm:"Confirm",clear:"Clear",now:"Now"}}};return n[t.lang]||n.cn},T.prototype.init=function(){var e=this,t=e.config,n="yyyy|y|MM|M|dd|d|HH|H|mm|m|ss|s",a="static"===t.position,i={year:"yyyy",month:"yyyy-MM",date:"yyyy-MM-dd",time:"HH:mm:ss",datetime:"yyyy-MM-dd HH:mm:ss"};t.elem=w(t.elem),t.eventElem=w(t.eventElem),t.elem[0]&&(t.range===!0&&(t.range="-"),t.format===i.date&&(t.format=i[t.type]),e.format=t.format.match(new RegExp(n+"|.","g"))||[],e.EXP_IF="",e.EXP_SPLIT="",w.each(e.format,function(t,a){var i=new RegExp(n).test(a)?"\\d{"+function(){return new RegExp(n).test(e.format[0===t?t+1:t-1]||"")?/^yyyy|y$/.test(a)?4:a.length:/^yyyy$/.test(a)?"1,4":/^y$/.test(a)?"1,308":"1,2"}()+"}":"\\"+a;e.EXP_IF=e.EXP_IF+i,e.EXP_SPLIT=e.EXP_SPLIT+"("+i+")"}),e.EXP_IF=new RegExp("^"+(t.range?e.EXP_IF+"\\s\\"+t.range+"\\s"+e.EXP_IF:e.EXP_IF)+"$"),e.EXP_SPLIT=new RegExp("^"+e.EXP_SPLIT+"$",""),e.isInput(t.elem[0])||"focus"===t.trigger&&(t.trigger="click"),t.elem.attr("lay-key")||(t.elem.attr("lay-key",e.index),t.eventElem.attr("lay-key",e.index)),t.mark=w.extend({},t.calendar&&"cn"===t.lang?{"0-1-1":"元旦","0-2-14":"情人","0-3-8":"妇女","0-3-12":"植树","0-4-1":"愚人","0-5-1":"劳动","0-5-4":"青年","0-6-1":"儿童","0-9-10":"教师","0-9-18":"国耻","0-10-1":"国庆","0-12-25":"圣诞"}:{},t.mark),w.each(["min","max"],function(e,n){var a=[],i=[];if("number"==typeof t[n]){var r=t[n],o=(new Date).getTime(),s=864e5,l=new Date(r?r<s?o+r*s:r:o);a=[l.getFullYear(),l.getMonth()+1,l.getDate()],r<s||(i=[l.getHours(),l.getMinutes(),l.getSeconds()])}else a=(t[n].match(/\d+-\d+-\d+/)||[""])[0].split("-"),i=(t[n].match(/\d+:\d+:\d+/)||[""])[0].split(":");t[n]={year:0|a[0]||(new Date).getFullYear(),month:a[1]?(0|a[1])-1:(new Date).getMonth(),date:0|a[2]||(new Date).getDate(),hours:0|i[0],minutes:0|i[1],seconds:0|i[2]}}),e.elemID="layui-laydate"+t.elem.attr("lay-key"),(t.show||a)&&e.render(),a||e.events(),t.value&&(t.value.constructor===Date?e.setValue(e.parse(0,e.systemDate(t.value))):e.setValue(t.value)))},T.prototype.render=function(){var e=this,t=e.config,n=e.lang(),a="static"===t.position,i=e.elem=w.elem("div",{id:e.elemID,"class":["layui-laydate",t.range?" layui-laydate-range":"",a?" "+c:"",t.theme&&"default"!==t.theme&&!/^#/.test(t.theme)?" laydate-theme-"+t.theme:""].join("")}),r=e.elemMain=[],o=e.elemHeader=[],s=e.elemCont=[],l=e.table=[],d=e.footer=w.elem("div",{"class":p});if(t.zIndex&&(i.style.zIndex=t.zIndex),w.each(new Array(2),function(e){if(!t.range&&e>0)return!0;var a=w.elem("div",{"class":"layui-laydate-header"}),i=[function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-prev-y"});return e.innerHTML="&#xe65a;",e}(),function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-prev-m"});return e.innerHTML="&#xe603;",e}(),function(){var e=w.elem("div",{"class":"laydate-set-ym"}),t=w.elem("span"),n=w.elem("span");return e.appendChild(t),e.appendChild(n),e}(),function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-next-m"});return e.innerHTML="&#xe602;",e}(),function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-next-y"});return e.innerHTML="&#xe65b;",e}()],d=w.elem("div",{"class":"layui-laydate-content"}),c=w.elem("table"),m=w.elem("thead"),u=w.elem("tr");w.each(i,function(e,t){a.appendChild(t)}),m.appendChild(u),w.each(new Array(6),function(e){var t=c.insertRow(0);w.each(new Array(7),function(a){if(0===e){var i=w.elem("th");i.innerHTML=n.weeks[a],u.appendChild(i)}t.insertCell(a)})}),c.insertBefore(m,c.children[0]),d.appendChild(c),r[e]=w.elem("div",{"class":"layui-laydate-main laydate-main-list-"+e}),r[e].appendChild(a),r[e].appendChild(d),o.push(i),s.push(d),l.push(c)}),w(d).html(function(){var e=[],i=[];return"datetime"===t.type&&e.push('<span lay-type="datetime" class="laydate-btns-time">'+n.timeTips+"</span>"),w.each(t.btns,function(e,r){var o=n.tools[r]||"btn";t.range&&"now"===r||(a&&"clear"===r&&(o="cn"===t.lang?"重置":"Reset"),i.push('<span lay-type="'+r+'" class="laydate-btns-'+r+'">'+o+"</span>"))}),e.push('<div class="laydate-footer-btns">'+i.join("")+"</div>"),e.join("")}()),w.each(r,function(e,t){i.appendChild(t)}),t.showBottom&&i.appendChild(d),/^#/.test(t.theme)){var m=w.elem("style"),u=["#{{id}} .layui-laydate-header{background-color:{{theme}};}","#{{id}} .layui-this{background-color:{{theme}} !important;}"].join("").replace(/{{id}}/g,e.elemID).replace(/{{theme}}/g,t.theme);"styleSheet"in m?(m.setAttribute("type","text/css"),m.styleSheet.cssText=u):m.innerHTML=u,w(i).addClass("laydate-theme-molv"),i.appendChild(m)}e.remove(T.thisElemDate),a?t.elem.append(i):(document.body.appendChild(i),e.position()),e.checkDate().calendar(),e.changeEvent(),T.thisElemDate=e.elemID,"function"==typeof t.ready&&t.ready(w.extend({},t.dateTime,{month:t.dateTime.month+1}))},T.prototype.remove=function(e){var t=this,n=(t.config,w("#"+(e||t.elemID)));return n.hasClass(c)||t.checkDate(function(){n.remove()}),t},T.prototype.position=function(){var e=this,t=e.config,n=e.bindElem||t.elem[0],a=n.getBoundingClientRect(),i=e.elem.offsetWidth,r=e.elem.offsetHeight,o=function(e){return e=e?"scrollLeft":"scrollTop",document.body[e]|document.documentElement[e]},s=function(e){return document.documentElement[e?"clientWidth":"clientHeight"]},l=5,d=a.left,c=a.bottom;d+i+l>s("width")&&(d=s("width")-i-l),c+r+l>s()&&(c=a.top>r?a.top-r:s()-r,c-=2*l),t.position&&(e.elem.style.position=t.position),e.elem.style.left=d+("fixed"===t.position?0:o(1))+"px",e.elem.style.top=c+("fixed"===t.position?0:o())+"px"},T.prototype.hint=function(e){var t=this,n=(t.config,w.elem("div",{"class":h}));n.innerHTML=e||"",w(t.elem).find("."+h).remove(),t.elem.appendChild(n),clearTimeout(t.hinTimer),t.hinTimer=setTimeout(function(){w(t.elem).find("."+h).remove()},3e3)},T.prototype.getAsYM=function(e,t,n){return n?t--:t++,t<0&&(t=11,e--),t>11&&(t=0,e++),[e,t]},T.prototype.systemDate=function(e){var t=e||new Date;return{year:t.getFullYear(),month:t.getMonth(),date:t.getDate(),hours:e?e.getHours():0,minutes:e?e.getMinutes():0,seconds:e?e.getSeconds():0}},T.prototype.checkDate=function(e){var t,a,i=this,r=(new Date,i.config),o=r.dateTime=r.dateTime||i.systemDate(),s=i.bindElem||r.elem[0],l=(i.isInput(s)?"val":"html",i.isInput(s)?s.value:"static"===r.position?"":s.innerHTML),c=function(e){e.year>d[1]&&(e.year=d[1],a=!0),e.month>11&&(e.month=11,a=!0),e.hours>23&&(e.hours=0,a=!0),e.minutes>59&&(e.minutes=0,e.hours++,a=!0),e.seconds>59&&(e.seconds=0,e.minutes++,a=!0),t=n.getEndDate(e.month+1,e.year),e.date>t&&(e.date=t,a=!0)},m=function(e,t,n){var o=["startTime","endTime"];t=(t.match(i.EXP_SPLIT)||[]).slice(1),n=n||0,r.range&&(i[o[n]]=i[o[n]]||{}),w.each(i.format,function(s,l){var c=parseFloat(t[s]);t[s].length<l.length&&(a=!0),/yyyy|y/.test(l)?(c<d[0]&&(c=d[0],a=!0),e.year=c):/MM|M/.test(l)?(c<1&&(c=1,a=!0),e.month=c-1):/dd|d/.test(l)?(c<1&&(c=1,a=!0),e.date=c):/HH|H/.test(l)?(c<1&&(c=0,a=!0),e.hours=c,r.range&&(i[o[n]].hours=c)):/mm|m/.test(l)?(c<1&&(c=0,a=!0),e.minutes=c,r.range&&(i[o[n]].minutes=c)):/ss|s/.test(l)&&(c<1&&(c=0,a=!0),e.seconds=c,r.range&&(i[o[n]].seconds=c))}),c(e)};return"limit"===e?(c(o),i):(l=l||r.value,"string"==typeof l&&(l=l.replace(/\s+/g," ").replace(/^\s|\s$/g,"")),i.startState&&!i.endState&&(delete i.startState,i.endState=!0),"string"==typeof l&&l?i.EXP_IF.test(l)?r.range?(l=l.split(" "+r.range+" "),i.startDate=i.startDate||i.systemDate(),i.endDate=i.endDate||i.systemDate(),r.dateTime=w.extend({},i.startDate),w.each([i.startDate,i.endDate],function(e,t){m(t,l[e],e)})):m(o,l):(i.hint("日期格式不合法<br>必须遵循下述格式:<br>"+(r.range?r.format+" "+r.range+" "+r.format:r.format)+"<br>已为你重置"),a=!0):l&&l.constructor===Date?r.dateTime=i.systemDate(l):(r.dateTime=i.systemDate(),delete i.startState,delete i.endState,delete i.startDate,delete i.endDate,delete i.startTime,delete i.endTime),c(o),a&&l&&i.setValue(r.range?i.endDate?i.parse():"":i.parse()),e&&e(),i)},T.prototype.mark=function(e,t){var n,a=this,i=a.config;return w.each(i.mark,function(e,a){var i=e.split("-");i[0]!=t[0]&&0!=i[0]||i[1]!=t[1]&&0!=i[1]||i[2]!=t[2]||(n=a||t[2])}),n&&e.html('<span class="laydate-day-mark">'+n+"</span>"),a},T.prototype.limit=function(e,t,n,a){var i,r=this,o=r.config,l={},d=o[n>41?"endDate":"dateTime"],c=w.extend({},d,t||{});return w.each({now:c,min:o.min,max:o.max},function(e,t){l[e]=r.newDate(w.extend({year:t.year,month:t.month,date:t.date},function(){var e={};return w.each(a,function(n,a){e[a]=t[a]}),e}())).getTime()}),i=l.now<l.min||l.now>l.max,e&&e[i?"addClass":"removeClass"](s),i},T.prototype.calendar=function(e){var t,a,i,r=this,s=r.config,l=e||s.dateTime,c=new Date,m=r.lang(),u="date"!==s.type&&"datetime"!==s.type,h=e?1:0,y=w(r.table[h]).find("td"),f=w(r.elemHeader[h][2]).find("span");if(l.year<d[0]&&(l.year=d[0],r.hint("最低只能支持到公元"+d[0]+"年")),l.year>d[1]&&(l.year=d[1],r.hint("最高只能支持到公元"+d[1]+"年")),r.firstDate||(r.firstDate=w.extend({},l)),c.setFullYear(l.year,l.month,1),t=c.getDay(),a=n.getEndDate(l.month||12,l.year),i=n.getEndDate(l.month+1,l.year),w.each(y,function(e,n){var d=[l.year,l.month],c=0;n=w(n),n.removeAttr("class"),e<t?(c=a-t+e,n.addClass("laydate-day-prev"),d=r.getAsYM(l.year,l.month,"sub")):e>=t&&e<i+t?(c=e-t,s.range||c+1===l.date&&n.addClass(o)):(c=e-i-t,n.addClass("laydate-day-next"),d=r.getAsYM(l.year,l.month)),d[1]++,d[2]=c+1,n.attr("lay-ymd",d.join("-")).html(d[2]),r.mark(n,d).limit(n,{year:d[0],month:d[1]-1,date:d[2]},e)}),w(f[0]).attr("lay-ym",l.year+"-"+(l.month+1)),w(f[1]).attr("lay-ym",l.year+"-"+(l.month+1)),"cn"===s.lang?(w(f[0]).attr("lay-type","year").html(l.year+"年"),w(f[1]).attr("lay-type","month").html(l.month+1+"月")):(w(f[0]).attr("lay-type","month").html(m.month[l.month]),w(f[1]).attr("lay-type","year").html(l.year)),u&&(s.range&&(e?r.endDate=r.endDate||{year:l.year+("year"===s.type?1:0),month:l.month+("month"===s.type?0:-1)}:r.startDate=r.startDate||{year:l.year,month:l.month},e&&(r.listYM=[[r.startDate.year,r.startDate.month+1],[r.endDate.year,r.endDate.month+1]],r.list(s.type,0).list(s.type,1),"time"===s.type?r.setBtnStatus("时间",w.extend({},r.systemDate(),r.startTime),w.extend({},r.systemDate(),r.endTime)):r.setBtnStatus(!0))),s.range||(r.listYM=[[l.year,l.month+1]],r.list(s.type,0))),s.range&&!e){var p=r.getAsYM(l.year,l.month);r.calendar(w.extend({},l,{year:p[0],month:p[1]}))}return s.range||r.limit(w(r.footer).find(g),null,0,["hours","minutes","seconds"]),s.range&&e&&!u&&r.stampRange(),r},T.prototype.list=function(e,t){var n=this,a=n.config,i=a.dateTime,r=n.lang(),l=a.range&&"date"!==a.type&&"datetime"!==a.type,d=w.elem("ul",{"class":m+" "+{year:"laydate-year-list",month:"laydate-month-list",time:"laydate-time-list"}[e]}),c=n.elemHeader[t],u=w(c[2]).find("span"),h=n.elemCont[t||0],y=w(h).find("."+m)[0],f="cn"===a.lang,p=f?"年":"",T=n.listYM[t]||{},C=["hours","minutes","seconds"],x=["startTime","endTime"][t];if(T[0]<1&&(T[0]=1),"year"===e){var M,b=M=T[0]-7;b<1&&(b=M=1),w.each(new Array(15),function(e){var i=w.elem("li",{"lay-ym":M}),r={year:M};M==T[0]&&w(i).addClass(o),i.innerHTML=M+p,d.appendChild(i),M<n.firstDate.year?(r.month=a.min.month,r.date=a.min.date):M>=n.firstDate.year&&(r.month=a.max.month,r.date=a.max.date),n.limit(w(i),r,t),M++}),w(u[f?0:1]).attr("lay-ym",M-8+"-"+T[1]).html(b+p+" - "+(M-1+p))}else if("month"===e)w.each(new Array(12),function(e){var i=w.elem("li",{"lay-ym":e}),s={year:T[0],month:e};e+1==T[1]&&w(i).addClass(o),i.innerHTML=r.month[e]+(f?"月":""),d.appendChild(i),T[0]<n.firstDate.year?s.date=a.min.date:T[0]>=n.firstDate.year&&(s.date=a.max.date),n.limit(w(i),s,t)}),w(u[f?0:1]).attr("lay-ym",T[0]+"-"+T[1]).html(T[0]+p);else if("time"===e){var E=function(){w(d).find("ol").each(function(e,a){w(a).find("li").each(function(a,i){n.limit(w(i),[{hours:a},{hours:n[x].hours,minutes:a},{hours:n[x].hours,minutes:n[x].minutes,seconds:a}][e],t,[["hours"],["hours","minutes"],["hours","minutes","seconds"]][e])})}),a.range||n.limit(w(n.footer).find(g),n[x],0,["hours","minutes","seconds"])};a.range?n[x]||(n[x]={hours:0,minutes:0,seconds:0}):n[x]=i,w.each([24,60,60],function(e,t){var a=w.elem("li"),i=["<p>"+r.time[e]+"</p><ol>"];w.each(new Array(t),function(t){i.push("<li"+(n[x][C[e]]===t?' class="'+o+'"':"")+">"+w.digit(t,2)+"</li>")}),a.innerHTML=i.join("")+"</ol>",d.appendChild(a)}),E()}if(y&&h.removeChild(y),h.appendChild(d),"year"===e||"month"===e)w(n.elemMain[t]).addClass("laydate-ym-show"),w(d).find("li").on("click",function(){var r=0|w(this).attr("lay-ym");if(!w(this).hasClass(s)){if(0===t)i[e]=r,l&&(n.startDate[e]=r),n.limit(w(n.footer).find(g),null,0);else if(l)n.endDate[e]=r;else{var c="year"===e?n.getAsYM(r,T[1]-1,"sub"):n.getAsYM(T[0],r,"sub");w.extend(i,{year:c[0],month:c[1]})}"year"===a.type||"month"===a.type?(w(d).find("."+o).removeClass(o),w(this).addClass(o),"month"===a.type&&"year"===e&&(n.listYM[t][0]=r,l&&(n[["startDate","endDate"][t]].year=r),n.list("month",t))):(n.checkDate("limit").calendar(),n.closeList()),n.setBtnStatus(),a.range||n.done(null,"change"),w(n.footer).find(D).removeClass(s)}});else{var S=w.elem("span",{"class":v}),k=function(){w(d).find("ol").each(function(e){var t=this,a=w(t).find("li");t.scrollTop=30*(n[x][C[e]]-2),t.scrollTop<=0&&a.each(function(e,n){if(!w(this).hasClass(s))return t.scrollTop=30*(e-2),!0})})},H=w(c[2]).find("."+v);k(),S.innerHTML=a.range?[r.startTime,r.endTime][t]:r.timeTips,w(n.elemMain[t]).addClass("laydate-time-show"),H[0]&&H.remove(),c[2].appendChild(S),w(d).find("ol").each(function(e){var t=this;w(t).find("li").on("click",function(){var r=0|this.innerHTML;w(this).hasClass(s)||(a.range?n[x][C[e]]=r:i[C[e]]=r,w(t).find("."+o).removeClass(o),w(this).addClass(o),E(),k(),(n.endDate||"time"===a.type)&&n.done(null,"change"),n.setBtnStatus())})})}return n},T.prototype.listYM=[],T.prototype.closeList=function(){var e=this;e.config;w.each(e.elemCont,function(t,n){w(this).find("."+m).remove(),w(e.elemMain[t]).removeClass("laydate-ym-show laydate-time-show")}),w(e.elem).find("."+v).remove()},T.prototype.setBtnStatus=function(e,t,n){var a,i=this,r=i.config,o=w(i.footer).find(g),d=r.range&&"date"!==r.type&&"time"!==r.type;d&&(t=t||i.startDate,n=n||i.endDate,a=i.newDate(t).getTime()>i.newDate(n).getTime(),i.limit(null,t)||i.limit(null,n)?o.addClass(s):o[a?"addClass":"removeClass"](s),e&&a&&i.hint("string"==typeof e?l.replace(/日期/g,e):l))},T.prototype.parse=function(e,t){var n=this,a=n.config,i=t||(e?w.extend({},n.endDate,n.endTime):a.range?w.extend({},n.startDate,n.startTime):a.dateTime),r=n.format.concat();return w.each(r,function(e,t){/yyyy|y/.test(t)?r[e]=w.digit(i.year,t.length):/MM|M/.test(t)?r[e]=w.digit(i.month+1,t.length):/dd|d/.test(t)?r[e]=w.digit(i.date,t.length):/HH|H/.test(t)?r[e]=w.digit(i.hours,t.length):/mm|m/.test(t)?r[e]=w.digit(i.minutes,t.length):/ss|s/.test(t)&&(r[e]=w.digit(i.seconds,t.length))}),a.range&&!e?r.join("")+" "+a.range+" "+n.parse(1):r.join("")},T.prototype.newDate=function(e){return e=e||{},new Date(e.year||1,e.month||0,e.date||1,e.hours||0,e.minutes||0,e.seconds||0)},T.prototype.setValue=function(e){var t=this,n=t.config,a=t.bindElem||n.elem[0],i=t.isInput(a)?"val":"html";return"static"===n.position||w(a)[i](e||""),this},T.prototype.stampRange=function(){var e,t,n=this,a=n.config,i=w(n.elem).find("td");if(a.range&&!n.endDate&&w(n.footer).find(g).addClass(s),n.endDate)return e=n.newDate({year:n.startDate.year,month:n.startDate.month,date:n.startDate.date}).getTime(),t=n.newDate({year:n.endDate.year,month:n.endDate.month,date:n.endDate.date}).getTime(),e>t?n.hint(l):void w.each(i,function(a,i){var r=w(i).attr("lay-ymd").split("-"),s=n.newDate({year:r[0],month:r[1]-1,date:r[2]}).getTime();w(i).removeClass(u+" "+o),s!==e&&s!==t||w(i).addClass(w(i).hasClass(y)||w(i).hasClass(f)?u:o),s>e&&s<t&&w(i).addClass(u)})},T.prototype.done=function(e,t){var n=this,a=n.config,i=w.extend({},n.startDate?w.extend(n.startDate,n.startTime):a.dateTime),r=w.extend({},w.extend(n.endDate,n.endTime));return w.each([i,r],function(e,t){"month"in t&&w.extend(t,{month:t.month+1})}),e=e||[n.parse(),i,r],"function"==typeof a[t||"done"]&&a[t||"done"].apply(a,e),n},T.prototype.choose=function(e){var t=this,n=t.config,a=n.dateTime,i=w(t.elem).find("td"),r=e.attr("lay-ymd").split("-"),l=function(e){new Date;e&&w.extend(a,r),n.range&&(t.startDate?w.extend(t.startDate,r):t.startDate=w.extend({},r,t.startTime),t.startYMD=r)};if(r={year:0|r[0],month:(0|r[1])-1,date:0|r[2]},!e.hasClass(s))if(n.range){if(w.each(["startTime","endTime"],function(e,n){t[n]=t[n]||{hours:0,minutes:0,seconds:0}}),t.endState)l(),delete t.endState,delete t.endDate,t.startState=!0,i.removeClass(o+" "+u),e.addClass(o);else if(t.startState){if(e.addClass(o),t.endDate?w.extend(t.endDate,r):t.endDate=w.extend({},r,t.endTime),t.newDate(r).getTime()<t.newDate(t.startYMD).getTime()){var d=w.extend({},t.endDate,{hours:t.startDate.hours,minutes:t.startDate.minutes,seconds:t.startDate.seconds});w.extend(t.endDate,t.startDate,{hours:t.endDate.hours,minutes:t.endDate.minutes,seconds:t.endDate.seconds}),t.startDate=d}n.showBottom||t.done(),t.stampRange(),t.endState=!0,t.done(null,"change")}else e.addClass(o),l(),t.startState=!0;w(t.footer).find(g)[t.endDate?"removeClass":"addClass"](s)}else"static"===n.position?(l(!0),t.calendar().done().done(null,"change")):"date"===n.type?(l(!0),t.setValue(t.parse()).remove().done()):"datetime"===n.type&&(l(!0),t.calendar().done(null,"change"))},T.prototype.tool=function(e,t){var n=this,a=n.config,i=a.dateTime,r="static"===a.position,o={datetime:function(){w(e).hasClass(s)||(n.list("time",0),a.range&&n.list("time",1),w(e).attr("lay-type","date").html(n.lang().dateTips))},date:function(){n.closeList(),w(e).attr("lay-type","datetime").html(n.lang().timeTips)},clear:function(){n.setValue("").remove(),r&&(w.extend(i,n.firstDate),n.calendar()),a.range&&(delete n.startState,delete n.endState,delete n.endDate,delete n.startTime,delete n.endTime),n.done(["",{},{}])},now:function(){var e=new Date;w.extend(i,n.systemDate(),{hours:e.getHours(),minutes:e.getMinutes(),seconds:e.getSeconds()}),n.setValue(n.parse()).remove(),r&&n.calendar(),n.done()},confirm:function(){if(a.range){if(!n.endDate)return n.hint("请先选择日期范围");if(w(e).hasClass(s))return n.hint("time"===a.type?l.replace(/日期/g,"时间"):l)}else if(w(e).hasClass(s))return n.hint("不在有效日期或时间范围内");n.done(),n.setValue(n.parse()).remove()}};o[t]&&o[t]()},T.prototype.change=function(e){var t=this,n=t.config,a=n.dateTime,i=n.range&&("year"===n.type||"month"===n.type),r=t.elemCont[e||0],o=t.listYM[e],s=function(s){var l=["startDate","endDate"][e],d=w(r).find(".laydate-year-list")[0],c=w(r).find(".laydate-month-list")[0];return d&&(o[0]=s?o[0]-15:o[0]+15,t.list("year",e)),c&&(s?o[0]--:o[0]++,t.list("month",e)),(d||c)&&(w.extend(a,{year:o[0]}),i&&(t[l].year=o[0]),n.range||t.done(null,"change"),t.setBtnStatus(),n.range||t.limit(w(t.footer).find(g),{year:o[0]})),d||c};return{prevYear:function(){s("sub")||(a.year--,t.checkDate("limit").calendar(),n.range||t.done(null,"change"))},prevMonth:function(){var e=t.getAsYM(a.year,a.month,"sub");w.extend(a,{year:e[0],month:e[1]}),t.checkDate("limit").calendar(),n.range||t.done(null,"change")},nextMonth:function(){var e=t.getAsYM(a.year,a.month);w.extend(a,{year:e[0],month:e[1]}),t.checkDate("limit").calendar(),n.range||t.done(null,"change")},nextYear:function(){s()||(a.year++,t.checkDate("limit").calendar(),n.range||t.done(null,"change"))}}},T.prototype.changeEvent=function(){var e=this;e.config;w(e.elem).on("click",function(e){w.stope(e)}),w.each(e.elemHeader,function(t,n){w(n[0]).on("click",function(n){e.change(t).prevYear()}),w(n[1]).on("click",function(n){e.change(t).prevMonth()}),w(n[2]).find("span").on("click",function(n){var a=w(this),i=a.attr("lay-ym"),r=a.attr("lay-type");i&&(i=i.split("-"),e.listYM[t]=[0|i[0],0|i[1]],e.list(r,t),w(e.footer).find(D).addClass(s))}),w(n[3]).on("click",function(n){e.change(t).nextMonth()}),w(n[4]).on("click",function(n){e.change(t).nextYear()})}),w.each(e.table,function(t,n){var a=w(n).find("td");a.on("click",function(){e.choose(w(this))})}),w(e.footer).find("span").on("click",function(){var t=w(this).attr("lay-type");e.tool(this,t)})},T.prototype.isInput=function(e){return/input|textarea/.test(e.tagName.toLocaleLowerCase())},T.prototype.events=function(){var e=this,t=e.config,n=function(n,a){n.on(t.trigger,function(){a&&(e.bindElem=this),e.render()})};t.elem[0]&&!t.elem[0].eventHandler&&(n(t.elem,"bind"),n(t.eventElem),w(document).on("click",function(n){n.target!==t.elem[0]&&n.target!==t.eventElem[0]&&n.target!==w(t.closeStop)[0]&&e.remove()}).on("keydown",function(t){13===t.keyCode&&w("#"+e.elemID)[0]&&e.elemID===T.thisElem&&(t.preventDefault(),w(e.footer).find(g)[0].click())}),w(window).on("resize",function(){return!(!e.elem||!w(r)[0])&&void e.position()}),t.elem[0].eventHandler=!0)},n.render=function(e){var t=new T(e);return a.call(t)},n.getEndDate=function(e,t){var n=new Date;return n.setFullYear(t||n.getFullYear(),e||n.getMonth()+1,1),new Date(n.getTime()-864e5).getDate()},window.lay=window.lay||w,e?(n.ready(),layui.define(function(e){n.path=layui.cache.dir,e(i,n)})):"function"==typeof define&&define.amd?define(function(){return n}):function(){n.ready(),window.laydate=n}()}();
+/** layui-v5.0.9 日期与时间组件 MIT License By https://www.layui.com */
+ ;!function(){"use strict";var e=window.layui&&layui.define,t={getPath:function(){var e=document.currentScript?document.currentScript.src:function(){for(var e,t=document.scripts,n=t.length-1,a=n;a>0;a--)if("interactive"===t[a].readyState){e=t[a].src;break}return e||t[n].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),getStyle:function(e,t){var n=e.currentStyle?e.currentStyle:window.getComputedStyle(e,null);return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](t)},link:function(e,a,i){if(n.path){var r=document.getElementsByTagName("head")[0],o=document.createElement("link");"string"==typeof a&&(i=a);var s=(i||e).replace(/\.|\//g,""),l="layuicss-"+s,d=0;o.rel="stylesheet",o.href=n.path+e,o.id=l,document.getElementById(l)||r.appendChild(o),"function"==typeof a&&!function c(){return++d>80?window.console&&console.error("laydate.css: Invalid"):void(1989===parseInt(t.getStyle(document.getElementById(l),"width"))?a():setTimeout(c,100))}()}}},n={v:"5.0.9",config:{},index:window.laydate&&window.laydate.v?1e5:0,path:t.getPath,set:function(e){var t=this;return t.config=w.extend({},t.config,e),t},ready:function(a){var i="laydate",r="",o=(e?"modules/laydate/":"theme/")+"default/laydate.css?v="+n.v+r;return e?layui.addcss(o,a,i):t.link(o,a,i),this}},a=function(){var e=this;return{hint:function(t){e.hint.call(e,t)},config:e.config}},i="laydate",r=".layui-laydate",o="layui-this",s="laydate-disabled",l="开始日期超出了结束日期<br>建议重新选择",d=[100,2e5],c="layui-laydate-static",m="layui-laydate-list",u="laydate-selected",h="layui-laydate-hint",y="laydate-day-prev",f="laydate-day-next",p="layui-laydate-footer",g=".laydate-btns-confirm",v="laydate-time-text",D=".laydate-btns-time",T=function(e){var t=this;t.index=++n.index,t.config=w.extend({},t.config,n.config,e),n.ready(function(){t.init()})},w=function(e){return new C(e)},C=function(e){for(var t=0,n="object"==typeof e?[e]:(this.selector=e,document.querySelectorAll(e||null));t<n.length;t++)this.push(n[t])};C.prototype=[],C.prototype.constructor=C,w.extend=function(){var e=1,t=arguments,n=function(e,t){e=e||(t.constructor===Array?[]:{});for(var a in t)e[a]=t[a]&&t[a].constructor===Object?n(e[a],t[a]):t[a];return e};for(t[0]="object"==typeof t[0]?t[0]:{};e<t.length;e++)"object"==typeof t[e]&&n(t[0],t[e]);return t[0]},w.ie=function(){var e=navigator.userAgent.toLowerCase();return!!(window.ActiveXObject||"ActiveXObject"in window)&&((e.match(/msie\s(\d+)/)||[])[1]||"11")}(),w.stope=function(e){e=e||window.event,e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},w.each=function(e,t){var n,a=this;if("function"!=typeof t)return a;if(e=e||[],e.constructor===Object){for(n in e)if(t.call(e[n],n,e[n]))break}else for(n=0;n<e.length&&!t.call(e[n],n,e[n]);n++);return a},w.digit=function(e,t,n){var a="";e=String(e),t=t||2;for(var i=e.length;i<t;i++)a+="0";return e<Math.pow(10,t)?a+(0|e):e},w.elem=function(e,t){var n=document.createElement(e);return w.each(t||{},function(e,t){n.setAttribute(e,t)}),n},C.addStr=function(e,t){return e=e.replace(/\s+/," "),t=t.replace(/\s+/," ").split(" "),w.each(t,function(t,n){new RegExp("\\b"+n+"\\b").test(e)||(e=e+" "+n)}),e.replace(/^\s|\s$/,"")},C.removeStr=function(e,t){return e=e.replace(/\s+/," "),t=t.replace(/\s+/," ").split(" "),w.each(t,function(t,n){var a=new RegExp("\\b"+n+"\\b");a.test(e)&&(e=e.replace(a,""))}),e.replace(/\s+/," ").replace(/^\s|\s$/,"")},C.prototype.find=function(e){var t=this,n=0,a=[],i="object"==typeof e;return this.each(function(r,o){for(var s=i?[e]:o.querySelectorAll(e||null);n<s.length;n++)a.push(s[n]);t.shift()}),i||(t.selector=(t.selector?t.selector+" ":"")+e),w.each(a,function(e,n){t.push(n)}),t},C.prototype.each=function(e){return w.each.call(this,this,e)},C.prototype.addClass=function(e,t){return this.each(function(n,a){a.className=C[t?"removeStr":"addStr"](a.className,e)})},C.prototype.removeClass=function(e){return this.addClass(e,!0)},C.prototype.hasClass=function(e){var t=!1;return this.each(function(n,a){new RegExp("\\b"+e+"\\b").test(a.className)&&(t=!0)}),t},C.prototype.attr=function(e,t){var n=this;return void 0===t?function(){if(n.length>0)return n[0].getAttribute(e)}():n.each(function(n,a){a.setAttribute(e,t)})},C.prototype.removeAttr=function(e){return this.each(function(t,n){n.removeAttribute(e)})},C.prototype.html=function(e){return this.each(function(t,n){n.innerHTML=e})},C.prototype.val=function(e){return this.each(function(t,n){n.value=e})},C.prototype.append=function(e){return this.each(function(t,n){"object"==typeof e?n.appendChild(e):n.innerHTML=n.innerHTML+e})},C.prototype.remove=function(e){return this.each(function(t,n){e?n.removeChild(e):n.parentNode.removeChild(n)})},C.prototype.on=function(e,t){return this.each(function(n,a){a.attachEvent?a.attachEvent("on"+e,function(e){e.target=e.srcElement,t.call(a,e)}):a.addEventListener(e,t,!1)})},C.prototype.off=function(e,t){return this.each(function(n,a){a.detachEvent?a.detachEvent("on"+e,t):a.removeEventListener(e,t,!1)})},T.isLeapYear=function(e){return e%4===0&&e%100!==0||e%400===0},T.prototype.config={type:"date",range:!1,format:"yyyy-MM-dd",value:null,min:"1900-1-1",max:"2099-12-31",trigger:"focus",show:!1,showBottom:!0,btns:["clear","now","confirm"],lang:"cn",theme:"default",position:null,calendar:!1,mark:{},zIndex:null,done:null,change:null},T.prototype.lang=function(){var e=this,t=e.config,n={cn:{weeks:["日","一","二","三","四","五","六"],time:["时","分","秒"],timeTips:"选择时间",startTime:"开始时间",endTime:"结束时间",dateTips:"返回日期",month:["一","二","三","四","五","六","七","八","九","十","十一","十二"],tools:{confirm:"确定",clear:"清空",now:"现在"}},en:{weeks:["Su","Mo","Tu","We","Th","Fr","Sa"],time:["Hours","Minutes","Seconds"],timeTips:"Select Time",startTime:"Start Time",endTime:"End Time",dateTips:"Select Date",month:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],tools:{confirm:"Confirm",clear:"Clear",now:"Now"}}};return n[t.lang]||n.cn},T.prototype.init=function(){var e=this,t=e.config,n="yyyy|y|MM|M|dd|d|HH|H|mm|m|ss|s",a="static"===t.position,i={year:"yyyy",month:"yyyy-MM",date:"yyyy-MM-dd",time:"HH:mm:ss",datetime:"yyyy-MM-dd HH:mm:ss"};t.elem=w(t.elem),t.eventElem=w(t.eventElem),t.elem[0]&&(t.range===!0&&(t.range="-"),t.format===i.date&&(t.format=i[t.type]),e.format=t.format.match(new RegExp(n+"|.","g"))||[],e.EXP_IF="",e.EXP_SPLIT="",w.each(e.format,function(t,a){var i=new RegExp(n).test(a)?"\\d{"+function(){return new RegExp(n).test(e.format[0===t?t+1:t-1]||"")?/^yyyy|y$/.test(a)?4:a.length:/^yyyy$/.test(a)?"1,4":/^y$/.test(a)?"1,308":"1,2"}()+"}":"\\"+a;e.EXP_IF=e.EXP_IF+i,e.EXP_SPLIT=e.EXP_SPLIT+"("+i+")"}),e.EXP_IF=new RegExp("^"+(t.range?e.EXP_IF+"\\s\\"+t.range+"\\s"+e.EXP_IF:e.EXP_IF)+"$"),e.EXP_SPLIT=new RegExp("^"+e.EXP_SPLIT+"$",""),e.isInput(t.elem[0])||"focus"===t.trigger&&(t.trigger="click"),t.elem.attr("lay-key")||(t.elem.attr("lay-key",e.index),t.eventElem.attr("lay-key",e.index)),t.mark=w.extend({},t.calendar&&"cn"===t.lang?{"0-1-1":"元旦","0-2-14":"情人","0-3-8":"妇女","0-3-12":"植树","0-4-1":"愚人","0-5-1":"劳动","0-5-4":"青年","0-6-1":"儿童","0-9-10":"教师","0-9-18":"国耻","0-10-1":"国庆","0-12-25":"圣诞"}:{},t.mark),w.each(["min","max"],function(e,n){var a=[],i=[];if("number"==typeof t[n]){var r=t[n],o=(new Date).getTime(),s=864e5,l=new Date(r?r<s?o+r*s:r:o);a=[l.getFullYear(),l.getMonth()+1,l.getDate()],r<s||(i=[l.getHours(),l.getMinutes(),l.getSeconds()])}else a=(t[n].match(/\d+-\d+-\d+/)||[""])[0].split("-"),i=(t[n].match(/\d+:\d+:\d+/)||[""])[0].split(":");t[n]={year:0|a[0]||(new Date).getFullYear(),month:a[1]?(0|a[1])-1:(new Date).getMonth(),date:0|a[2]||(new Date).getDate(),hours:0|i[0],minutes:0|i[1],seconds:0|i[2]}}),e.elemID="layui-laydate"+t.elem.attr("lay-key"),(t.show||a)&&e.render(),a||e.events(),t.value&&(t.value.constructor===Date?e.setValue(e.parse(0,e.systemDate(t.value))):e.setValue(t.value)))},T.prototype.render=function(){var e=this,t=e.config,n=e.lang(),a="static"===t.position,i=e.elem=w.elem("div",{id:e.elemID,"class":["layui-laydate",t.range?" layui-laydate-range":"",a?" "+c:"",t.theme&&"default"!==t.theme&&!/^#/.test(t.theme)?" laydate-theme-"+t.theme:""].join("")}),r=e.elemMain=[],o=e.elemHeader=[],s=e.elemCont=[],l=e.table=[],d=e.footer=w.elem("div",{"class":p});if(t.zIndex&&(i.style.zIndex=t.zIndex),w.each(new Array(2),function(e){if(!t.range&&e>0)return!0;var a=w.elem("div",{"class":"layui-laydate-header"}),i=[function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-prev-y"});return e.innerHTML="&#xe65a;",e}(),function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-prev-m"});return e.innerHTML="&#xe603;",e}(),function(){var e=w.elem("div",{"class":"laydate-set-ym"}),t=w.elem("span"),n=w.elem("span");return e.appendChild(t),e.appendChild(n),e}(),function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-next-m"});return e.innerHTML="&#xe602;",e}(),function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-next-y"});return e.innerHTML="&#xe65b;",e}()],d=w.elem("div",{"class":"layui-laydate-content"}),c=w.elem("table"),m=w.elem("thead"),u=w.elem("tr");w.each(i,function(e,t){a.appendChild(t)}),m.appendChild(u),w.each(new Array(6),function(e){var t=c.insertRow(0);w.each(new Array(7),function(a){if(0===e){var i=w.elem("th");i.innerHTML=n.weeks[a],u.appendChild(i)}t.insertCell(a)})}),c.insertBefore(m,c.children[0]),d.appendChild(c),r[e]=w.elem("div",{"class":"layui-laydate-main laydate-main-list-"+e}),r[e].appendChild(a),r[e].appendChild(d),o.push(i),s.push(d),l.push(c)}),w(d).html(function(){var e=[],i=[];return"datetime"===t.type&&e.push('<span lay-type="datetime" class="laydate-btns-time">'+n.timeTips+"</span>"),w.each(t.btns,function(e,r){var o=n.tools[r]||"btn";t.range&&"now"===r||(a&&"clear"===r&&(o="cn"===t.lang?"重置":"Reset"),i.push('<span lay-type="'+r+'" class="laydate-btns-'+r+'">'+o+"</span>"))}),e.push('<div class="laydate-footer-btns">'+i.join("")+"</div>"),e.join("")}()),w.each(r,function(e,t){i.appendChild(t)}),t.showBottom&&i.appendChild(d),/^#/.test(t.theme)){var m=w.elem("style"),u=["#{{id}} .layui-laydate-header{background-color:{{theme}};}","#{{id}} .layui-this{background-color:{{theme}} !important;}"].join("").replace(/{{id}}/g,e.elemID).replace(/{{theme}}/g,t.theme);"styleSheet"in m?(m.setAttribute("type","text/css"),m.styleSheet.cssText=u):m.innerHTML=u,w(i).addClass("laydate-theme-molv"),i.appendChild(m)}e.remove(T.thisElemDate),a?t.elem.append(i):(document.body.appendChild(i),e.position()),e.checkDate().calendar(),e.changeEvent(),T.thisElemDate=e.elemID,"function"==typeof t.ready&&t.ready(w.extend({},t.dateTime,{month:t.dateTime.month+1}))},T.prototype.remove=function(e){var t=this,n=(t.config,w("#"+(e||t.elemID)));return n.hasClass(c)||t.checkDate(function(){n.remove()}),t},T.prototype.position=function(){var e=this,t=e.config,n=e.bindElem||t.elem[0],a=n.getBoundingClientRect(),i=e.elem.offsetWidth,r=e.elem.offsetHeight,o=function(e){return e=e?"scrollLeft":"scrollTop",document.body[e]|document.documentElement[e]},s=function(e){return document.documentElement[e?"clientWidth":"clientHeight"]},l=5,d=a.left,c=a.bottom;d+i+l>s("width")&&(d=s("width")-i-l),c+r+l>s()&&(c=a.top>r?a.top-r:s()-r,c-=2*l),t.position&&(e.elem.style.position=t.position),e.elem.style.left=d+("fixed"===t.position?0:o(1))+"px",e.elem.style.top=c+("fixed"===t.position?0:o())+"px"},T.prototype.hint=function(e){var t=this,n=(t.config,w.elem("div",{"class":h}));n.innerHTML=e||"",w(t.elem).find("."+h).remove(),t.elem.appendChild(n),clearTimeout(t.hinTimer),t.hinTimer=setTimeout(function(){w(t.elem).find("."+h).remove()},3e3)},T.prototype.getAsYM=function(e,t,n){return n?t--:t++,t<0&&(t=11,e--),t>11&&(t=0,e++),[e,t]},T.prototype.systemDate=function(e){var t=e||new Date;return{year:t.getFullYear(),month:t.getMonth(),date:t.getDate(),hours:e?e.getHours():0,minutes:e?e.getMinutes():0,seconds:e?e.getSeconds():0}},T.prototype.checkDate=function(e){var t,a,i=this,r=(new Date,i.config),o=r.dateTime=r.dateTime||i.systemDate(),s=i.bindElem||r.elem[0],l=(i.isInput(s)?"val":"html",i.isInput(s)?s.value:"static"===r.position?"":s.innerHTML),c=function(e){e.year>d[1]&&(e.year=d[1],a=!0),e.month>11&&(e.month=11,a=!0),e.hours>23&&(e.hours=0,a=!0),e.minutes>59&&(e.minutes=0,e.hours++,a=!0),e.seconds>59&&(e.seconds=0,e.minutes++,a=!0),t=n.getEndDate(e.month+1,e.year),e.date>t&&(e.date=t,a=!0)},m=function(e,t,n){var o=["startTime","endTime"];t=(t.match(i.EXP_SPLIT)||[]).slice(1),n=n||0,r.range&&(i[o[n]]=i[o[n]]||{}),w.each(i.format,function(s,l){var c=parseFloat(t[s]);t[s].length<l.length&&(a=!0),/yyyy|y/.test(l)?(c<d[0]&&(c=d[0],a=!0),e.year=c):/MM|M/.test(l)?(c<1&&(c=1,a=!0),e.month=c-1):/dd|d/.test(l)?(c<1&&(c=1,a=!0),e.date=c):/HH|H/.test(l)?(c<1&&(c=0,a=!0),e.hours=c,r.range&&(i[o[n]].hours=c)):/mm|m/.test(l)?(c<1&&(c=0,a=!0),e.minutes=c,r.range&&(i[o[n]].minutes=c)):/ss|s/.test(l)&&(c<1&&(c=0,a=!0),e.seconds=c,r.range&&(i[o[n]].seconds=c))}),c(e)};return"limit"===e?(c(o),i):(l=l||r.value,"string"==typeof l&&(l=l.replace(/\s+/g," ").replace(/^\s|\s$/g,"")),i.startState&&!i.endState&&(delete i.startState,i.endState=!0),"string"==typeof l&&l?i.EXP_IF.test(l)?r.range?(l=l.split(" "+r.range+" "),i.startDate=i.startDate||i.systemDate(),i.endDate=i.endDate||i.systemDate(),r.dateTime=w.extend({},i.startDate),w.each([i.startDate,i.endDate],function(e,t){m(t,l[e],e)})):m(o,l):(i.hint("日期格式不合法<br>必须遵循下述格式:<br>"+(r.range?r.format+" "+r.range+" "+r.format:r.format)+"<br>已为你重置"),a=!0):l&&l.constructor===Date?r.dateTime=i.systemDate(l):(r.dateTime=i.systemDate(),delete i.startState,delete i.endState,delete i.startDate,delete i.endDate,delete i.startTime,delete i.endTime),c(o),a&&l&&i.setValue(r.range?i.endDate?i.parse():"":i.parse()),e&&e(),i)},T.prototype.mark=function(e,t){var n,a=this,i=a.config;return w.each(i.mark,function(e,a){var i=e.split("-");i[0]!=t[0]&&0!=i[0]||i[1]!=t[1]&&0!=i[1]||i[2]!=t[2]||(n=a||t[2])}),n&&e.html('<span class="laydate-day-mark">'+n+"</span>"),a},T.prototype.limit=function(e,t,n,a){var i,r=this,o=r.config,l={},d=o[n>41?"endDate":"dateTime"],c=w.extend({},d,t||{});return w.each({now:c,min:o.min,max:o.max},function(e,t){l[e]=r.newDate(w.extend({year:t.year,month:t.month,date:t.date},function(){var e={};return w.each(a,function(n,a){e[a]=t[a]}),e}())).getTime()}),i=l.now<l.min||l.now>l.max,e&&e[i?"addClass":"removeClass"](s),i},T.prototype.calendar=function(e){var t,a,i,r=this,s=r.config,l=e||s.dateTime,c=new Date,m=r.lang(),u="date"!==s.type&&"datetime"!==s.type,h=e?1:0,y=w(r.table[h]).find("td"),f=w(r.elemHeader[h][2]).find("span");if(l.year<d[0]&&(l.year=d[0],r.hint("最低只能支持到公元"+d[0]+"年")),l.year>d[1]&&(l.year=d[1],r.hint("最高只能支持到公元"+d[1]+"年")),r.firstDate||(r.firstDate=w.extend({},l)),c.setFullYear(l.year,l.month,1),t=c.getDay(),a=n.getEndDate(l.month||12,l.year),i=n.getEndDate(l.month+1,l.year),w.each(y,function(e,n){var d=[l.year,l.month],c=0;n=w(n),n.removeAttr("class"),e<t?(c=a-t+e,n.addClass("laydate-day-prev"),d=r.getAsYM(l.year,l.month,"sub")):e>=t&&e<i+t?(c=e-t,s.range||c+1===l.date&&n.addClass(o)):(c=e-i-t,n.addClass("laydate-day-next"),d=r.getAsYM(l.year,l.month)),d[1]++,d[2]=c+1,n.attr("lay-ymd",d.join("-")).html(d[2]),r.mark(n,d).limit(n,{year:d[0],month:d[1]-1,date:d[2]},e)}),w(f[0]).attr("lay-ym",l.year+"-"+(l.month+1)),w(f[1]).attr("lay-ym",l.year+"-"+(l.month+1)),"cn"===s.lang?(w(f[0]).attr("lay-type","year").html(l.year+"年"),w(f[1]).attr("lay-type","month").html(l.month+1+"月")):(w(f[0]).attr("lay-type","month").html(m.month[l.month]),w(f[1]).attr("lay-type","year").html(l.year)),u&&(s.range&&(e?r.endDate=r.endDate||{year:l.year+("year"===s.type?1:0),month:l.month+("month"===s.type?0:-1)}:r.startDate=r.startDate||{year:l.year,month:l.month},e&&(r.listYM=[[r.startDate.year,r.startDate.month+1],[r.endDate.year,r.endDate.month+1]],r.list(s.type,0).list(s.type,1),"time"===s.type?r.setBtnStatus("时间",w.extend({},r.systemDate(),r.startTime),w.extend({},r.systemDate(),r.endTime)):r.setBtnStatus(!0))),s.range||(r.listYM=[[l.year,l.month+1]],r.list(s.type,0))),s.range&&!e){var p=r.getAsYM(l.year,l.month);r.calendar(w.extend({},l,{year:p[0],month:p[1]}))}return s.range||r.limit(w(r.footer).find(g),null,0,["hours","minutes","seconds"]),s.range&&e&&!u&&r.stampRange(),r},T.prototype.list=function(e,t){var n=this,a=n.config,i=a.dateTime,r=n.lang(),l=a.range&&"date"!==a.type&&"datetime"!==a.type,d=w.elem("ul",{"class":m+" "+{year:"laydate-year-list",month:"laydate-month-list",time:"laydate-time-list"}[e]}),c=n.elemHeader[t],u=w(c[2]).find("span"),h=n.elemCont[t||0],y=w(h).find("."+m)[0],f="cn"===a.lang,p=f?"年":"",T=n.listYM[t]||{},C=["hours","minutes","seconds"],x=["startTime","endTime"][t];if(T[0]<1&&(T[0]=1),"year"===e){var M,b=M=T[0]-7;b<1&&(b=M=1),w.each(new Array(15),function(e){var i=w.elem("li",{"lay-ym":M}),r={year:M};M==T[0]&&w(i).addClass(o),i.innerHTML=M+p,d.appendChild(i),M<n.firstDate.year?(r.month=a.min.month,r.date=a.min.date):M>=n.firstDate.year&&(r.month=a.max.month,r.date=a.max.date),n.limit(w(i),r,t),M++}),w(u[f?0:1]).attr("lay-ym",M-8+"-"+T[1]).html(b+p+" - "+(M-1+p))}else if("month"===e)w.each(new Array(12),function(e){var i=w.elem("li",{"lay-ym":e}),s={year:T[0],month:e};e+1==T[1]&&w(i).addClass(o),i.innerHTML=r.month[e]+(f?"月":""),d.appendChild(i),T[0]<n.firstDate.year?s.date=a.min.date:T[0]>=n.firstDate.year&&(s.date=a.max.date),n.limit(w(i),s,t)}),w(u[f?0:1]).attr("lay-ym",T[0]+"-"+T[1]).html(T[0]+p);else if("time"===e){var E=function(){w(d).find("ol").each(function(e,a){w(a).find("li").each(function(a,i){n.limit(w(i),[{hours:a},{hours:n[x].hours,minutes:a},{hours:n[x].hours,minutes:n[x].minutes,seconds:a}][e],t,[["hours"],["hours","minutes"],["hours","minutes","seconds"]][e])})}),a.range||n.limit(w(n.footer).find(g),n[x],0,["hours","minutes","seconds"])};a.range?n[x]||(n[x]={hours:0,minutes:0,seconds:0}):n[x]=i,w.each([24,60,60],function(e,t){var a=w.elem("li"),i=["<p>"+r.time[e]+"</p><ol>"];w.each(new Array(t),function(t){i.push("<li"+(n[x][C[e]]===t?' class="'+o+'"':"")+">"+w.digit(t,2)+"</li>")}),a.innerHTML=i.join("")+"</ol>",d.appendChild(a)}),E()}if(y&&h.removeChild(y),h.appendChild(d),"year"===e||"month"===e)w(n.elemMain[t]).addClass("laydate-ym-show"),w(d).find("li").on("click",function(){var r=0|w(this).attr("lay-ym");if(!w(this).hasClass(s)){if(0===t)i[e]=r,l&&(n.startDate[e]=r),n.limit(w(n.footer).find(g),null,0);else if(l)n.endDate[e]=r;else{var c="year"===e?n.getAsYM(r,T[1]-1,"sub"):n.getAsYM(T[0],r,"sub");w.extend(i,{year:c[0],month:c[1]})}"year"===a.type||"month"===a.type?(w(d).find("."+o).removeClass(o),w(this).addClass(o),"month"===a.type&&"year"===e&&(n.listYM[t][0]=r,l&&(n[["startDate","endDate"][t]].year=r),n.list("month",t))):(n.checkDate("limit").calendar(),n.closeList()),n.setBtnStatus(),a.range||n.done(null,"change"),w(n.footer).find(D).removeClass(s)}});else{var S=w.elem("span",{"class":v}),k=function(){w(d).find("ol").each(function(e){var t=this,a=w(t).find("li");t.scrollTop=30*(n[x][C[e]]-2),t.scrollTop<=0&&a.each(function(e,n){if(!w(this).hasClass(s))return t.scrollTop=30*(e-2),!0})})},H=w(c[2]).find("."+v);k(),S.innerHTML=a.range?[r.startTime,r.endTime][t]:r.timeTips,w(n.elemMain[t]).addClass("laydate-time-show"),H[0]&&H.remove(),c[2].appendChild(S),w(d).find("ol").each(function(e){var t=this;w(t).find("li").on("click",function(){var r=0|this.innerHTML;w(this).hasClass(s)||(a.range?n[x][C[e]]=r:i[C[e]]=r,w(t).find("."+o).removeClass(o),w(this).addClass(o),E(),k(),(n.endDate||"time"===a.type)&&n.done(null,"change"),n.setBtnStatus())})})}return n},T.prototype.listYM=[],T.prototype.closeList=function(){var e=this;e.config;w.each(e.elemCont,function(t,n){w(this).find("."+m).remove(),w(e.elemMain[t]).removeClass("laydate-ym-show laydate-time-show")}),w(e.elem).find("."+v).remove()},T.prototype.setBtnStatus=function(e,t,n){var a,i=this,r=i.config,o=w(i.footer).find(g),d=r.range&&"date"!==r.type&&"time"!==r.type;d&&(t=t||i.startDate,n=n||i.endDate,a=i.newDate(t).getTime()>i.newDate(n).getTime(),i.limit(null,t)||i.limit(null,n)?o.addClass(s):o[a?"addClass":"removeClass"](s),e&&a&&i.hint("string"==typeof e?l.replace(/日期/g,e):l))},T.prototype.parse=function(e,t){var n=this,a=n.config,i=t||(e?w.extend({},n.endDate,n.endTime):a.range?w.extend({},n.startDate,n.startTime):a.dateTime),r=n.format.concat();return w.each(r,function(e,t){/yyyy|y/.test(t)?r[e]=w.digit(i.year,t.length):/MM|M/.test(t)?r[e]=w.digit(i.month+1,t.length):/dd|d/.test(t)?r[e]=w.digit(i.date,t.length):/HH|H/.test(t)?r[e]=w.digit(i.hours,t.length):/mm|m/.test(t)?r[e]=w.digit(i.minutes,t.length):/ss|s/.test(t)&&(r[e]=w.digit(i.seconds,t.length))}),a.range&&!e?r.join("")+" "+a.range+" "+n.parse(1):r.join("")},T.prototype.newDate=function(e){return e=e||{},new Date(e.year||1,e.month||0,e.date||1,e.hours||0,e.minutes||0,e.seconds||0)},T.prototype.setValue=function(e){var t=this,n=t.config,a=t.bindElem||n.elem[0],i=t.isInput(a)?"val":"html";return"static"===n.position||w(a)[i](e||""),this},T.prototype.stampRange=function(){var e,t,n=this,a=n.config,i=w(n.elem).find("td");if(a.range&&!n.endDate&&w(n.footer).find(g).addClass(s),n.endDate)return e=n.newDate({year:n.startDate.year,month:n.startDate.month,date:n.startDate.date}).getTime(),t=n.newDate({year:n.endDate.year,month:n.endDate.month,date:n.endDate.date}).getTime(),e>t?n.hint(l):void w.each(i,function(a,i){var r=w(i).attr("lay-ymd").split("-"),s=n.newDate({year:r[0],month:r[1]-1,date:r[2]}).getTime();w(i).removeClass(u+" "+o),s!==e&&s!==t||w(i).addClass(w(i).hasClass(y)||w(i).hasClass(f)?u:o),s>e&&s<t&&w(i).addClass(u)})},T.prototype.done=function(e,t){var n=this,a=n.config,i=w.extend({},n.startDate?w.extend(n.startDate,n.startTime):a.dateTime),r=w.extend({},w.extend(n.endDate,n.endTime));return w.each([i,r],function(e,t){"month"in t&&w.extend(t,{month:t.month+1})}),e=e||[n.parse(),i,r],"function"==typeof a[t||"done"]&&a[t||"done"].apply(a,e),n},T.prototype.choose=function(e){var t=this,n=t.config,a=n.dateTime,i=w(t.elem).find("td"),r=e.attr("lay-ymd").split("-"),l=function(e){new Date;e&&w.extend(a,r),n.range&&(t.startDate?w.extend(t.startDate,r):t.startDate=w.extend({},r,t.startTime),t.startYMD=r)};if(r={year:0|r[0],month:(0|r[1])-1,date:0|r[2]},!e.hasClass(s))if(n.range){if(w.each(["startTime","endTime"],function(e,n){t[n]=t[n]||{hours:0,minutes:0,seconds:0}}),t.endState)l(),delete t.endState,delete t.endDate,t.startState=!0,i.removeClass(o+" "+u),e.addClass(o);else if(t.startState){if(e.addClass(o),t.endDate?w.extend(t.endDate,r):t.endDate=w.extend({},r,t.endTime),t.newDate(r).getTime()<t.newDate(t.startYMD).getTime()){var d=w.extend({},t.endDate,{hours:t.startDate.hours,minutes:t.startDate.minutes,seconds:t.startDate.seconds});w.extend(t.endDate,t.startDate,{hours:t.endDate.hours,minutes:t.endDate.minutes,seconds:t.endDate.seconds}),t.startDate=d}n.showBottom||t.done(),t.stampRange(),t.endState=!0,t.done(null,"change")}else e.addClass(o),l(),t.startState=!0;w(t.footer).find(g)[t.endDate?"removeClass":"addClass"](s)}else"static"===n.position?(l(!0),t.calendar().done().done(null,"change")):"date"===n.type?(l(!0),t.setValue(t.parse()).remove().done()):"datetime"===n.type&&(l(!0),t.calendar().done(null,"change"))},T.prototype.tool=function(e,t){var n=this,a=n.config,i=a.dateTime,r="static"===a.position,o={datetime:function(){w(e).hasClass(s)||(n.list("time",0),a.range&&n.list("time",1),w(e).attr("lay-type","date").html(n.lang().dateTips))},date:function(){n.closeList(),w(e).attr("lay-type","datetime").html(n.lang().timeTips)},clear:function(){n.setValue("").remove(),r&&(w.extend(i,n.firstDate),n.calendar()),a.range&&(delete n.startState,delete n.endState,delete n.endDate,delete n.startTime,delete n.endTime),n.done(["",{},{}])},now:function(){var e=new Date;w.extend(i,n.systemDate(),{hours:e.getHours(),minutes:e.getMinutes(),seconds:e.getSeconds()}),n.setValue(n.parse()).remove(),r&&n.calendar(),n.done()},confirm:function(){if(a.range){if(!n.endDate)return n.hint("请先选择日期范围");if(w(e).hasClass(s))return n.hint("time"===a.type?l.replace(/日期/g,"时间"):l)}else if(w(e).hasClass(s))return n.hint("不在有效日期或时间范围内");n.done(),n.setValue(n.parse()).remove()}};o[t]&&o[t]()},T.prototype.change=function(e){var t=this,n=t.config,a=n.dateTime,i=n.range&&("year"===n.type||"month"===n.type),r=t.elemCont[e||0],o=t.listYM[e],s=function(s){var l=["startDate","endDate"][e],d=w(r).find(".laydate-year-list")[0],c=w(r).find(".laydate-month-list")[0];return d&&(o[0]=s?o[0]-15:o[0]+15,t.list("year",e)),c&&(s?o[0]--:o[0]++,t.list("month",e)),(d||c)&&(w.extend(a,{year:o[0]}),i&&(t[l].year=o[0]),n.range||t.done(null,"change"),t.setBtnStatus(),n.range||t.limit(w(t.footer).find(g),{year:o[0]})),d||c};return{prevYear:function(){s("sub")||(a.year--,t.checkDate("limit").calendar(),n.range||t.done(null,"change"))},prevMonth:function(){var e=t.getAsYM(a.year,a.month,"sub");w.extend(a,{year:e[0],month:e[1]}),t.checkDate("limit").calendar(),n.range||t.done(null,"change")},nextMonth:function(){var e=t.getAsYM(a.year,a.month);w.extend(a,{year:e[0],month:e[1]}),t.checkDate("limit").calendar(),n.range||t.done(null,"change")},nextYear:function(){s()||(a.year++,t.checkDate("limit").calendar(),n.range||t.done(null,"change"))}}},T.prototype.changeEvent=function(){var e=this;e.config;w(e.elem).on("click",function(e){w.stope(e)}),w.each(e.elemHeader,function(t,n){w(n[0]).on("click",function(n){e.change(t).prevYear()}),w(n[1]).on("click",function(n){e.change(t).prevMonth()}),w(n[2]).find("span").on("click",function(n){var a=w(this),i=a.attr("lay-ym"),r=a.attr("lay-type");i&&(i=i.split("-"),e.listYM[t]=[0|i[0],0|i[1]],e.list(r,t),w(e.footer).find(D).addClass(s))}),w(n[3]).on("click",function(n){e.change(t).nextMonth()}),w(n[4]).on("click",function(n){e.change(t).nextYear()})}),w.each(e.table,function(t,n){var a=w(n).find("td");a.on("click",function(){e.choose(w(this))})}),w(e.footer).find("span").on("click",function(){var t=w(this).attr("lay-type");e.tool(this,t)})},T.prototype.isInput=function(e){return/input|textarea/.test(e.tagName.toLocaleLowerCase())},T.prototype.events=function(){var e=this,t=e.config,n=function(n,a){n.on(t.trigger,function(){a&&(e.bindElem=this),e.render()})};t.elem[0]&&!t.elem[0].eventHandler&&(n(t.elem,"bind"),n(t.eventElem),w(document).on("click",function(n){n.target!==t.elem[0]&&n.target!==t.eventElem[0]&&n.target!==w(t.closeStop)[0]&&e.remove()}).on("keydown",function(t){13===t.keyCode&&w("#"+e.elemID)[0]&&e.elemID===T.thisElem&&(t.preventDefault(),w(e.footer).find(g)[0].click())}),w(window).on("resize",function(){return!(!e.elem||!w(r)[0])&&void e.position()}),t.elem[0].eventHandler=!0)},n.render=function(e){var t=new T(e);return a.call(t)},n.getEndDate=function(e,t){var n=new Date;return n.setFullYear(t||n.getFullYear(),e||n.getMonth()+1,1),new Date(n.getTime()-864e5).getDate()},window.lay=window.lay||w,e?(n.ready(),layui.define(function(e){n.path=layui.cache.dir,e(i,n)})):"function"==typeof define&&define.amd?define(function(){return n}):function(){n.ready(),window.laydate=n}()}();
diff --git a/src/main/resources/static/ajax/libs/layui/lay/modules/layer.js b/ruoyi-admin/src/main/resources/static/ajax/libs/layui/lay/modules/layer.js
similarity index 99%
rename from src/main/resources/static/ajax/libs/layui/lay/modules/layer.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/layui/lay/modules/layer.js
index 12cb6b5c..c2f009bd 100644
--- a/src/main/resources/static/ajax/libs/layui/lay/modules/layer.js
+++ b/ruoyi-admin/src/main/resources/static/ajax/libs/layui/lay/modules/layer.js
@@ -1,2 +1,2 @@
-/*! layer-v3.1.1 Web弹层组件 MIT License  http://layer.layui.com/  By 贤心 */
+/*! layer-v3.1.1 Web弹层组件 MIT License  http://layer.layui.com/  By 贤心 */
  ;!function(e,t){"use strict";var i,n,a=e.layui&&layui.define,o={getPath:function(){var e=document.currentScript?document.currentScript.src:function(){for(var e,t=document.scripts,i=t.length-1,n=i;n>0;n--)if("interactive"===t[n].readyState){e=t[n].src;break}return e||t[i].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),config:{},end:{},minIndex:0,minLeft:[],btn:["&#x786E;&#x5B9A;","&#x53D6;&#x6D88;"],type:["dialog","page","iframe","loading","tips"],getStyle:function(t,i){var n=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](i)},link:function(t,i,n){if(r.path){var a=document.getElementsByTagName("head")[0],s=document.createElement("link");"string"==typeof i&&(n=i);var l=(n||t).replace(/\.|\//g,""),f="layuicss-"+l,c=0;s.rel="stylesheet",s.href=r.path+t,s.id=f,document.getElementById(f)||a.appendChild(s),"function"==typeof i&&!function u(){return++c>80?e.console&&console.error("layer.css: Invalid"):void(1989===parseInt(o.getStyle(document.getElementById(f),"width"))?i():setTimeout(u,100))}()}}},r={v:"3.1.1",ie:function(){var t=navigator.userAgent.toLowerCase();return!!(e.ActiveXObject||"ActiveXObject"in e)&&((t.match(/msie\s(\d+)/)||[])[1]||"11")}(),index:e.layer&&e.layer.v?1e5:0,path:o.getPath,config:function(e,t){return e=e||{},r.cache=o.config=i.extend({},o.config,e),r.path=o.config.path||r.path,"string"==typeof e.extend&&(e.extend=[e.extend]),o.config.path&&r.ready(),e.extend?(a?layui.addcss("modules/layer/"+e.extend):o.link("theme/"+e.extend),this):this},ready:function(e){var t="layer",i="",n=(a?"modules/layer/":"theme/")+"default/layer.css?v="+r.v+i;return a?layui.addcss(n,e,t):o.link(n,e,t),this},alert:function(e,t,n){var a="function"==typeof t;return a&&(n=t),r.open(i.extend({content:e,yes:n},a?{}:t))},confirm:function(e,t,n,a){var s="function"==typeof t;return s&&(a=n,n=t),r.open(i.extend({content:e,btn:o.btn,yes:n,btn2:a},s?{}:t))},msg:function(e,n,a){var s="function"==typeof n,f=o.config.skin,c=(f?f+" "+f+"-msg":"")||"layui-layer-msg",u=l.anim.length-1;return s&&(a=n),r.open(i.extend({content:e,time:3e3,shade:!1,skin:c,title:!1,closeBtn:!1,btn:!1,resize:!1,end:a},s&&!o.config.skin?{skin:c+" layui-layer-hui",anim:u}:function(){return n=n||{},(n.icon===-1||n.icon===t&&!o.config.skin)&&(n.skin=c+" "+(n.skin||"layui-layer-hui")),n}()))},load:function(e,t){return r.open(i.extend({type:3,icon:e||0,resize:!1,shade:.01},t))},tips:function(e,t,n){return r.open(i.extend({type:4,content:[e,t],closeBtn:!1,time:3e3,shade:!1,resize:!1,fixed:!1,maxWidth:210},n))}},s=function(e){var t=this;t.index=++r.index,t.config=i.extend({},t.config,o.config,e),document.body?t.creat():setTimeout(function(){t.creat()},30)};s.pt=s.prototype;var l=["layui-layer",".layui-layer-title",".layui-layer-main",".layui-layer-dialog","layui-layer-iframe","layui-layer-content","layui-layer-btn","layui-layer-close"];l.anim=["layer-anim-00","layer-anim-01","layer-anim-02","layer-anim-03","layer-anim-04","layer-anim-05","layer-anim-06"],s.pt.config={type:0,shade:.3,fixed:!0,move:l[1],title:"&#x4FE1;&#x606F;",offset:"auto",area:"auto",closeBtn:1,time:0,zIndex:19891014,maxWidth:360,anim:0,isOutAnim:!0,icon:-1,moveType:1,resize:!0,scrollbar:!0,tips:2},s.pt.vessel=function(e,t){var n=this,a=n.index,r=n.config,s=r.zIndex+a,f="object"==typeof r.title,c=r.maxmin&&(1===r.type||2===r.type),u=r.title?'<div class="layui-layer-title" style="'+(f?r.title[1]:"")+'">'+(f?r.title[0]:r.title)+"</div>":"";return r.zIndex=s,t([r.shade?'<div class="layui-layer-shade" id="layui-layer-shade'+a+'" times="'+a+'" style="'+("z-index:"+(s-1)+"; ")+'"></div>':"",'<div class="'+l[0]+(" layui-layer-"+o.type[r.type])+(0!=r.type&&2!=r.type||r.shade?"":" layui-layer-border")+" "+(r.skin||"")+'" id="'+l[0]+a+'" type="'+o.type[r.type]+'" times="'+a+'" showtime="'+r.time+'" conType="'+(e?"object":"string")+'" style="z-index: '+s+"; width:"+r.area[0]+";height:"+r.area[1]+(r.fixed?"":";position:absolute;")+'">'+(e&&2!=r.type?"":u)+'<div id="'+(r.id||"")+'" class="layui-layer-content'+(0==r.type&&r.icon!==-1?" layui-layer-padding":"")+(3==r.type?" layui-layer-loading"+r.icon:"")+'">'+(0==r.type&&r.icon!==-1?'<i class="layui-layer-ico layui-layer-ico'+r.icon+'"></i>':"")+(1==r.type&&e?"":r.content||"")+'</div><span class="layui-layer-setwin">'+function(){var e=c?'<a class="layui-layer-min" href="javascript:;"><cite></cite></a><a class="layui-layer-ico layui-layer-max" href="javascript:;"></a>':"";return r.closeBtn&&(e+='<a class="layui-layer-ico '+l[7]+" "+l[7]+(r.title?r.closeBtn:4==r.type?"1":"2")+'" href="javascript:;"></a>'),e}()+"</span>"+(r.btn?function(){var e="";"string"==typeof r.btn&&(r.btn=[r.btn]);for(var t=0,i=r.btn.length;t<i;t++)e+='<a class="'+l[6]+t+'">'+r.btn[t]+"</a>";return'<div class="'+l[6]+" layui-layer-btn-"+(r.btnAlign||"")+'">'+e+"</div>"}():"")+(r.resize?'<span class="layui-layer-resize"></span>':"")+"</div>"],u,i('<div class="layui-layer-move"></div>')),n},s.pt.creat=function(){var e=this,t=e.config,a=e.index,s=t.content,f="object"==typeof s,c=i("body");if(!t.id||!i("#"+t.id)[0]){switch("string"==typeof t.area&&(t.area="auto"===t.area?["",""]:[t.area,""]),t.shift&&(t.anim=t.shift),6==r.ie&&(t.fixed=!1),t.type){case 0:t.btn="btn"in t?t.btn:o.btn[0],r.closeAll("dialog");break;case 2:var s=t.content=f?t.content:[t.content||"http://layer.layui.com","auto"];t.content='<iframe scrolling="'+(t.content[1]||"auto")+'" allowtransparency="true" id="'+l[4]+a+'" name="'+l[4]+a+'" onload="this.className=\'\';" class="layui-layer-load" frameborder="0" src="'+t.content[0]+'"></iframe>';break;case 3:delete t.title,delete t.closeBtn,t.icon===-1&&0===t.icon,r.closeAll("loading");break;case 4:f||(t.content=[t.content,"body"]),t.follow=t.content[1],t.content=t.content[0]+'<i class="layui-layer-TipsG"></i>',delete t.title,t.tips="object"==typeof t.tips?t.tips:[t.tips,!0],t.tipsMore||r.closeAll("tips")}if(e.vessel(f,function(n,r,u){c.append(n[0]),f?function(){2==t.type||4==t.type?function(){i("body").append(n[1])}():function(){s.parents("."+l[0])[0]||(s.data("display",s.css("display")).show().addClass("layui-layer-wrap").wrap(n[1]),i("#"+l[0]+a).find("."+l[5]).before(r))}()}():c.append(n[1]),i(".layui-layer-move")[0]||c.append(o.moveElem=u),e.layero=i("#"+l[0]+a),t.scrollbar||l.html.css("overflow","hidden").attr("layer-full",a)}).auto(a),i("#layui-layer-shade"+e.index).css({"background-color":t.shade[1]||"#000",opacity:t.shade[0]||t.shade}),2==t.type&&6==r.ie&&e.layero.find("iframe").attr("src",s[0]),4==t.type?e.tips():e.offset(),t.fixed&&n.on("resize",function(){e.offset(),(/^\d+%$/.test(t.area[0])||/^\d+%$/.test(t.area[1]))&&e.auto(a),4==t.type&&e.tips()}),t.time<=0||setTimeout(function(){r.close(e.index)},t.time),e.move().callback(),l.anim[t.anim]){var u="layer-anim "+l.anim[t.anim];e.layero.addClass(u).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){i(this).removeClass(u)})}t.isOutAnim&&e.layero.data("isOutAnim",!0)}},s.pt.auto=function(e){var t=this,a=t.config,o=i("#"+l[0]+e);""===a.area[0]&&a.maxWidth>0&&(r.ie&&r.ie<8&&a.btn&&o.width(o.innerWidth()),o.outerWidth()>a.maxWidth&&o.width(a.maxWidth));var s=[o.innerWidth(),o.innerHeight()],f=o.find(l[1]).outerHeight()||0,c=o.find("."+l[6]).outerHeight()||0,u=function(e){e=o.find(e),e.height(s[1]-f-c-2*(0|parseFloat(e.css("padding-top"))))};switch(a.type){case 2:u("iframe");break;default:""===a.area[1]?a.maxHeight>0&&o.outerHeight()>a.maxHeight?(s[1]=a.maxHeight,u("."+l[5])):a.fixed&&s[1]>=n.height()&&(s[1]=n.height(),u("."+l[5])):u("."+l[5])}return t},s.pt.offset=function(){var e=this,t=e.config,i=e.layero,a=[i.outerWidth(),i.outerHeight()],o="object"==typeof t.offset;e.offsetTop=(n.height()-a[1])/2,e.offsetLeft=(n.width()-a[0])/2,o?(e.offsetTop=t.offset[0],e.offsetLeft=t.offset[1]||e.offsetLeft):"auto"!==t.offset&&("t"===t.offset?e.offsetTop=0:"r"===t.offset?e.offsetLeft=n.width()-a[0]:"b"===t.offset?e.offsetTop=n.height()-a[1]:"l"===t.offset?e.offsetLeft=0:"lt"===t.offset?(e.offsetTop=0,e.offsetLeft=0):"lb"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=0):"rt"===t.offset?(e.offsetTop=0,e.offsetLeft=n.width()-a[0]):"rb"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=n.width()-a[0]):e.offsetTop=t.offset),t.fixed||(e.offsetTop=/%$/.test(e.offsetTop)?n.height()*parseFloat(e.offsetTop)/100:parseFloat(e.offsetTop),e.offsetLeft=/%$/.test(e.offsetLeft)?n.width()*parseFloat(e.offsetLeft)/100:parseFloat(e.offsetLeft),e.offsetTop+=n.scrollTop(),e.offsetLeft+=n.scrollLeft()),i.attr("minLeft")&&(e.offsetTop=n.height()-(i.find(l[1]).outerHeight()||0),e.offsetLeft=i.css("left")),i.css({top:e.offsetTop,left:e.offsetLeft})},s.pt.tips=function(){var e=this,t=e.config,a=e.layero,o=[a.outerWidth(),a.outerHeight()],r=i(t.follow);r[0]||(r=i("body"));var s={width:r.outerWidth(),height:r.outerHeight(),top:r.offset().top,left:r.offset().left},f=a.find(".layui-layer-TipsG"),c=t.tips[0];t.tips[1]||f.remove(),s.autoLeft=function(){s.left+o[0]-n.width()>0?(s.tipLeft=s.left+s.width-o[0],f.css({right:12,left:"auto"})):s.tipLeft=s.left},s.where=[function(){s.autoLeft(),s.tipTop=s.top-o[1]-10,f.removeClass("layui-layer-TipsB").addClass("layui-layer-TipsT").css("border-right-color",t.tips[1])},function(){s.tipLeft=s.left+s.width+10,s.tipTop=s.top,f.removeClass("layui-layer-TipsL").addClass("layui-layer-TipsR").css("border-bottom-color",t.tips[1])},function(){s.autoLeft(),s.tipTop=s.top+s.height+10,f.removeClass("layui-layer-TipsT").addClass("layui-layer-TipsB").css("border-right-color",t.tips[1])},function(){s.tipLeft=s.left-o[0]-10,s.tipTop=s.top,f.removeClass("layui-layer-TipsR").addClass("layui-layer-TipsL").css("border-bottom-color",t.tips[1])}],s.where[c-1](),1===c?s.top-(n.scrollTop()+o[1]+16)<0&&s.where[2]():2===c?n.width()-(s.left+s.width+o[0]+16)>0||s.where[3]():3===c?s.top-n.scrollTop()+s.height+o[1]+16-n.height()>0&&s.where[0]():4===c&&o[0]+16-s.left>0&&s.where[1](),a.find("."+l[5]).css({"background-color":t.tips[1],"padding-right":t.closeBtn?"30px":""}),a.css({left:s.tipLeft-(t.fixed?n.scrollLeft():0),top:s.tipTop-(t.fixed?n.scrollTop():0)})},s.pt.move=function(){var e=this,t=e.config,a=i(document),s=e.layero,l=s.find(t.move),f=s.find(".layui-layer-resize"),c={};return t.move&&l.css("cursor","move"),l.on("mousedown",function(e){e.preventDefault(),t.move&&(c.moveStart=!0,c.offset=[e.clientX-parseFloat(s.css("left")),e.clientY-parseFloat(s.css("top"))],o.moveElem.css("cursor","move").show())}),f.on("mousedown",function(e){e.preventDefault(),c.resizeStart=!0,c.offset=[e.clientX,e.clientY],c.area=[s.outerWidth(),s.outerHeight()],o.moveElem.css("cursor","se-resize").show()}),a.on("mousemove",function(i){if(c.moveStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1],l="fixed"===s.css("position");if(i.preventDefault(),c.stX=l?0:n.scrollLeft(),c.stY=l?0:n.scrollTop(),!t.moveOut){var f=n.width()-s.outerWidth()+c.stX,u=n.height()-s.outerHeight()+c.stY;a<c.stX&&(a=c.stX),a>f&&(a=f),o<c.stY&&(o=c.stY),o>u&&(o=u)}s.css({left:a,top:o})}if(t.resize&&c.resizeStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1];i.preventDefault(),r.style(e.index,{width:c.area[0]+a,height:c.area[1]+o}),c.isResize=!0,t.resizing&&t.resizing(s)}}).on("mouseup",function(e){c.moveStart&&(delete c.moveStart,o.moveElem.hide(),t.moveEnd&&t.moveEnd(s)),c.resizeStart&&(delete c.resizeStart,o.moveElem.hide())}),e},s.pt.callback=function(){function e(){var e=a.cancel&&a.cancel(t.index,n);e===!1||r.close(t.index)}var t=this,n=t.layero,a=t.config;t.openLayer(),a.success&&(2==a.type?n.find("iframe").on("load",function(){a.success(n,t.index)}):a.success(n,t.index)),6==r.ie&&t.IE6(n),n.find("."+l[6]).children("a").on("click",function(){var e=i(this).index();if(0===e)a.yes?a.yes(t.index,n):a.btn1?a.btn1(t.index,n):r.close(t.index);else{var o=a["btn"+(e+1)]&&a["btn"+(e+1)](t.index,n);o===!1||r.close(t.index)}}),n.find("."+l[7]).on("click",e),a.shadeClose&&i("#layui-layer-shade"+t.index).on("click",function(){r.close(t.index)}),n.find(".layui-layer-min").on("click",function(){var e=a.min&&a.min(n);e===!1||r.min(t.index,a)}),n.find(".layui-layer-max").on("click",function(){i(this).hasClass("layui-layer-maxmin")?(r.restore(t.index),a.restore&&a.restore(n)):(r.full(t.index,a),setTimeout(function(){a.full&&a.full(n)},100))}),a.end&&(o.end[t.index]=a.end)},o.reselect=function(){i.each(i("select"),function(e,t){var n=i(this);n.parents("."+l[0])[0]||1==n.attr("layer")&&i("."+l[0]).length<1&&n.removeAttr("layer").show(),n=null})},s.pt.IE6=function(e){i("select").each(function(e,t){var n=i(this);n.parents("."+l[0])[0]||"none"===n.css("display")||n.attr({layer:"1"}).hide(),n=null})},s.pt.openLayer=function(){var e=this;r.zIndex=e.config.zIndex,r.setTop=function(e){var t=function(){r.zIndex++,e.css("z-index",r.zIndex+1)};return r.zIndex=parseInt(e[0].style.zIndex),e.on("mousedown",t),r.zIndex}},o.record=function(e){var t=[e.width(),e.height(),e.position().top,e.position().left+parseFloat(e.css("margin-left"))];e.find(".layui-layer-max").addClass("layui-layer-maxmin"),e.attr({area:t})},o.rescollbar=function(e){l.html.attr("layer-full")==e&&(l.html[0].style.removeProperty?l.html[0].style.removeProperty("overflow"):l.html[0].style.removeAttribute("overflow"),l.html.removeAttr("layer-full"))},e.layer=r,r.getChildFrame=function(e,t){return t=t||i("."+l[4]).attr("times"),i("#"+l[0]+t).find("iframe").contents().find(e)},r.getFrameIndex=function(e){return i("#"+e).parents("."+l[4]).attr("times")},r.iframeAuto=function(e){if(e){var t=r.getChildFrame("html",e).outerHeight(),n=i("#"+l[0]+e),a=n.find(l[1]).outerHeight()||0,o=n.find("."+l[6]).outerHeight()||0;n.css({height:t+a+o}),n.find("iframe").css({height:t})}},r.iframeSrc=function(e,t){i("#"+l[0]+e).find("iframe").attr("src",t)},r.style=function(e,t,n){var a=i("#"+l[0]+e),r=a.find(".layui-layer-content"),s=a.attr("type"),f=a.find(l[1]).outerHeight()||0,c=a.find("."+l[6]).outerHeight()||0;a.attr("minLeft");s!==o.type[3]&&s!==o.type[4]&&(n||(parseFloat(t.width)<=260&&(t.width=260),parseFloat(t.height)-f-c<=64&&(t.height=64+f+c)),a.css(t),c=a.find("."+l[6]).outerHeight(),s===o.type[2]?a.find("iframe").css({height:parseFloat(t.height)-f-c}):r.css({height:parseFloat(t.height)-f-c-parseFloat(r.css("padding-top"))-parseFloat(r.css("padding-bottom"))}))},r.min=function(e,t){var a=i("#"+l[0]+e),s=a.find(l[1]).outerHeight()||0,f=a.attr("minLeft")||181*o.minIndex+"px",c=a.css("position");o.record(a),o.minLeft[0]&&(f=o.minLeft[0],o.minLeft.shift()),a.attr("position",c),r.style(e,{width:180,height:s,left:f,top:n.height()-s,position:"fixed",overflow:"hidden"},!0),a.find(".layui-layer-min").hide(),"page"===a.attr("type")&&a.find(l[4]).hide(),o.rescollbar(e),a.attr("minLeft")||o.minIndex++,a.attr("minLeft",f)},r.restore=function(e){var t=i("#"+l[0]+e),n=t.attr("area").split(",");t.attr("type");r.style(e,{width:parseFloat(n[0]),height:parseFloat(n[1]),top:parseFloat(n[2]),left:parseFloat(n[3]),position:t.attr("position"),overflow:"visible"},!0),t.find(".layui-layer-max").removeClass("layui-layer-maxmin"),t.find(".layui-layer-min").show(),"page"===t.attr("type")&&t.find(l[4]).show(),o.rescollbar(e)},r.full=function(e){var t,a=i("#"+l[0]+e);o.record(a),l.html.attr("layer-full")||l.html.css("overflow","hidden").attr("layer-full",e),clearTimeout(t),t=setTimeout(function(){var t="fixed"===a.css("position");r.style(e,{top:t?0:n.scrollTop(),left:t?0:n.scrollLeft(),width:n.width(),height:n.height()},!0),a.find(".layui-layer-min").hide()},100)},r.title=function(e,t){var n=i("#"+l[0]+(t||r.index)).find(l[1]);n.html(e)},r.close=function(e){var t=i("#"+l[0]+e),n=t.attr("type"),a="layer-anim-close";if(t[0]){var s="layui-layer-wrap",f=function(){if(n===o.type[1]&&"object"===t.attr("conType")){t.children(":not(."+l[5]+")").remove();for(var a=t.find("."+s),r=0;r<2;r++)a.unwrap();a.css("display",a.data("display")).removeClass(s)}else{if(n===o.type[2])try{var f=i("#"+l[4]+e)[0];f.contentWindow.document.write(""),f.contentWindow.close(),t.find("."+l[5])[0].removeChild(f)}catch(c){}t[0].innerHTML="",t.remove()}"function"==typeof o.end[e]&&o.end[e](),delete o.end[e]};t.data("isOutAnim")&&t.addClass("layer-anim "+a),i("#layui-layer-moves, #layui-layer-shade"+e).remove(),6==r.ie&&o.reselect(),o.rescollbar(e),t.attr("minLeft")&&(o.minIndex--,o.minLeft.push(t.attr("minLeft"))),r.ie&&r.ie<10||!t.data("isOutAnim")?f():setTimeout(function(){f()},200)}},r.closeAll=function(e){i.each(i("."+l[0]),function(){var t=i(this),n=e?t.attr("type")===e:1;n&&r.close(t.attr("times")),n=null})};var f=r.cache||{},c=function(e){return f.skin?" "+f.skin+" "+f.skin+"-"+e:""};r.prompt=function(e,t){var a="";if(e=e||{},"function"==typeof e&&(t=e),e.area){var o=e.area;a='style="width: '+o[0]+"; height: "+o[1]+';"',delete e.area}var s,l=2==e.formType?'<textarea class="layui-layer-input"'+a+">"+(e.value||"")+"</textarea>":function(){return'<input type="'+(1==e.formType?"password":"text")+'" class="layui-layer-input" value="'+(e.value||"")+'">'}(),f=e.success;return delete e.success,r.open(i.extend({type:1,btn:["&#x786E;&#x5B9A;","&#x53D6;&#x6D88;"],content:l,skin:"layui-layer-prompt"+c("prompt"),maxWidth:n.width(),success:function(e){s=e.find(".layui-layer-input"),s.focus(),"function"==typeof f&&f(e)},resize:!1,yes:function(i){var n=s.val();""===n?s.focus():n.length>(e.maxlength||500)?r.tips("&#x6700;&#x591A;&#x8F93;&#x5165;"+(e.maxlength||500)+"&#x4E2A;&#x5B57;&#x6570;",s,{tips:1}):t&&t(n,i,s)}},e))},r.tab=function(e){e=e||{};var t=e.tab||{},n="layui-this",a=e.success;return delete e.success,r.open(i.extend({type:1,skin:"layui-layer-tab"+c("tab"),resize:!1,title:function(){var e=t.length,i=1,a="";if(e>0)for(a='<span class="'+n+'">'+t[0].title+"</span>";i<e;i++)a+="<span>"+t[i].title+"</span>";return a}(),content:'<ul class="layui-layer-tabmain">'+function(){var e=t.length,i=1,a="";if(e>0)for(a='<li class="layui-layer-tabli '+n+'">'+(t[0].content||"no content")+"</li>";i<e;i++)a+='<li class="layui-layer-tabli">'+(t[i].content||"no  content")+"</li>";return a}()+"</ul>",success:function(t){var o=t.find(".layui-layer-title").children(),r=t.find(".layui-layer-tabmain").children();o.on("mousedown",function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0;var a=i(this),o=a.index();a.addClass(n).siblings().removeClass(n),r.eq(o).show().siblings().hide(),"function"==typeof e.change&&e.change(o)}),"function"==typeof a&&a(t)}},e))},r.photos=function(t,n,a){function o(e,t,i){var n=new Image;return n.src=e,n.complete?t(n):(n.onload=function(){n.onload=null,t(n)},void(n.onerror=function(e){n.onerror=null,i(e)}))}var s={};if(t=t||{},t.photos){var l=t.photos.constructor===Object,f=l?t.photos:{},u=f.data||[],d=f.start||0;s.imgIndex=(0|d)+1,t.img=t.img||"img";var y=t.success;if(delete t.success,l){if(0===u.length)return r.msg("&#x6CA1;&#x6709;&#x56FE;&#x7247;")}else{var p=i(t.photos),h=function(){u=[],p.find(t.img).each(function(e){var t=i(this);t.attr("layer-index",e),u.push({alt:t.attr("alt"),pid:t.attr("layer-pid"),src:t.attr("layer-src")||t.attr("src"),thumb:t.attr("src")})})};if(h(),0===u.length)return;if(n||p.on("click",t.img,function(){var e=i(this),n=e.attr("layer-index");r.photos(i.extend(t,{photos:{start:n,data:u,tab:t.tab},full:t.full}),!0),h()}),!n)return}s.imgprev=function(e){s.imgIndex--,s.imgIndex<1&&(s.imgIndex=u.length),s.tabimg(e)},s.imgnext=function(e,t){s.imgIndex++,s.imgIndex>u.length&&(s.imgIndex=1,t)||s.tabimg(e)},s.keyup=function(e){if(!s.end){var t=e.keyCode;e.preventDefault(),37===t?s.imgprev(!0):39===t?s.imgnext(!0):27===t&&r.close(s.index)}},s.tabimg=function(e){if(!(u.length<=1))return f.start=s.imgIndex-1,r.close(s.index),r.photos(t,!0,e)},s.event=function(){s.bigimg.hover(function(){s.imgsee.show()},function(){s.imgsee.hide()}),s.bigimg.find(".layui-layer-imgprev").on("click",function(e){e.preventDefault(),s.imgprev()}),s.bigimg.find(".layui-layer-imgnext").on("click",function(e){e.preventDefault(),s.imgnext()}),i(document).on("keyup",s.keyup)},s.loadi=r.load(1,{shade:!("shade"in t)&&.9,scrollbar:!1}),o(u[d].src,function(n){r.close(s.loadi),s.index=r.open(i.extend({type:1,id:"layui-layer-photos",area:function(){var a=[n.width,n.height],o=[i(e).width()-100,i(e).height()-100];if(!t.full&&(a[0]>o[0]||a[1]>o[1])){var r=[a[0]/o[0],a[1]/o[1]];r[0]>r[1]?(a[0]=a[0]/r[0],a[1]=a[1]/r[0]):r[0]<r[1]&&(a[0]=a[0]/r[1],a[1]=a[1]/r[1])}return[a[0]+"px",a[1]+"px"]}(),title:!1,shade:.9,shadeClose:!0,closeBtn:!1,move:".layui-layer-phimg img",moveType:1,scrollbar:!1,moveOut:!0,isOutAnim:!1,skin:"layui-layer-photos"+c("photos"),content:'<div class="layui-layer-phimg"><img src="'+u[d].src+'" alt="'+(u[d].alt||"")+'" layer-pid="'+u[d].pid+'"><div class="layui-layer-imgsee">'+(u.length>1?'<span class="layui-layer-imguide"><a href="javascript:;" class="layui-layer-iconext layui-layer-imgprev"></a><a href="javascript:;" class="layui-layer-iconext layui-layer-imgnext"></a></span>':"")+'<div class="layui-layer-imgbar" style="display:'+(a?"block":"")+'"><span class="layui-layer-imgtit"><a href="javascript:;">'+(u[d].alt||"")+"</a><em>"+s.imgIndex+"/"+u.length+"</em></span></div></div></div>",success:function(e,i){s.bigimg=e.find(".layui-layer-phimg"),s.imgsee=e.find(".layui-layer-imguide,.layui-layer-imgbar"),s.event(e),t.tab&&t.tab(u[d],e),"function"==typeof y&&y(e)},end:function(){s.end=!0,i(document).off("keyup",s.keyup)}},t))},function(){r.close(s.loadi),r.msg("&#x5F53;&#x524D;&#x56FE;&#x7247;&#x5730;&#x5740;&#x5F02;&#x5E38;<br>&#x662F;&#x5426;&#x7EE7;&#x7EED;&#x67E5;&#x770B;&#x4E0B;&#x4E00;&#x5F20;&#xFF1F;",{time:3e4,btn:["&#x4E0B;&#x4E00;&#x5F20;","&#x4E0D;&#x770B;&#x4E86;"],yes:function(){u.length>1&&s.imgnext(!0,!0)}})})}},o.run=function(t){i=t,n=i(e),l.html=i("html"),r.open=function(e){var t=new s(e);return t.index}},e.layui&&layui.define?(r.ready(),layui.define("jquery",function(t){r.path=layui.cache.dir,o.run(layui.$),e.layer=r,t("layer",r)})):"function"==typeof define&&define.amd?define(["jquery"],function(){return o.run(e.jQuery),r}):function(){o.run(e.jQuery),r.ready()}()}(window);
\ No newline at end of file
diff --git a/src/main/resources/static/ajax/libs/layui/layui.js b/ruoyi-admin/src/main/resources/static/ajax/libs/layui/layui.js
similarity index 99%
rename from src/main/resources/static/ajax/libs/layui/layui.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/layui/layui.js
index 248777f6..bc6a0f6f 100644
--- a/src/main/resources/static/ajax/libs/layui/layui.js
+++ b/ruoyi-admin/src/main/resources/static/ajax/libs/layui/layui.js
@@ -1,2 +1,2 @@
-/** layui-v2.3.0-rc1 MIT License By https://www.layui.com */
+/** layui-v2.3.0-rc1 MIT License By https://www.layui.com */
  ;!function(e){"use strict";var t=document,n={modules:{},status:{},timeout:10,event:{}},o=function(){this.v="2.3.0-rc1"},r=function(){var e=t.currentScript?t.currentScript.src:function(){for(var e,n=t.scripts,o=n.length-1,r=o;r>0;r--)if("interactive"===n[r].readyState){e=n[r].src;break}return e||n[o].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),a=function(t){e.console&&console.error&&console.error("Layui hint: "+t)},i="undefined"!=typeof opera&&"[object Opera]"===opera.toString(),u={layer:"modules/layer",laydate:"modules/laydate",laypage:"modules/laypage",laytpl:"modules/laytpl",layim:"modules/layim",layedit:"modules/layedit",form:"modules/form",upload:"modules/upload",tree:"modules/tree",table:"modules/table",element:"modules/element",rate:"modules/rate",carousel:"modules/carousel",flow:"modules/flow",util:"modules/util",code:"modules/code",jquery:"modules/jquery",mobile:"modules/mobile","layui.all":"../layui.all"};o.prototype.cache=n,o.prototype.define=function(e,t){var o=this,r="function"==typeof e,a=function(){var e=function(e,t){layui[e]=t,n.status[e]=!0};return"function"==typeof t&&t(function(o,r){e(o,r),n.callback[o]=function(){t(e)}}),this};return r&&(t=e,e=[]),layui["layui.all"]||!layui["layui.all"]&&layui["layui.mobile"]?a.call(o):(o.use(e,a),o)},o.prototype.use=function(e,o,l){function s(e,t){var o="PLaySTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/;("load"===e.type||o.test((e.currentTarget||e.srcElement).readyState))&&(n.modules[d]=t,f.removeChild(v),function r(){return++m>1e3*n.timeout/4?a(d+" is not a valid module"):void(n.status[d]?c():setTimeout(r,4))}())}function c(){l.push(layui[d]),e.length>1?y.use(e.slice(1),o,l):"function"==typeof o&&o.apply(layui,l)}var y=this,p=n.dir=n.dir?n.dir:r,f=t.getElementsByTagName("head")[0];e="string"==typeof e?[e]:e,window.jQuery&&jQuery.fn.on&&(y.each(e,function(t,n){"jquery"===n&&e.splice(t,1)}),layui.jquery=layui.$=jQuery);var d=e[0],m=0;if(l=l||[],n.host=n.host||(p.match(/\/\/([\s\S]+?)\//)||["//"+location.host+"/"])[0],0===e.length||layui["layui.all"]&&u[d]||!layui["layui.all"]&&layui["layui.mobile"]&&u[d])return c(),y;if(n.modules[d])!function g(){return++m>1e3*n.timeout/4?a(d+" is not a valid module"):void("string"==typeof n.modules[d]&&n.status[d]?c():setTimeout(g,4))}();else{var v=t.createElement("script"),h=(u[d]?p+"lay/":/^\{\/\}/.test(y.modules[d])?"":n.base||"")+(y.modules[d]||d)+".js";h=h.replace(/^\{\/\}/,""),v.async=!0,v.charset="utf-8",v.src=h+function(){var e=n.version===!0?n.v||(new Date).getTime():n.version||"";return e?"?v="+e:""}(),f.appendChild(v),!v.attachEvent||v.attachEvent.toString&&v.attachEvent.toString().indexOf("[native code")<0||i?v.addEventListener("load",function(e){s(e,h)},!1):v.attachEvent("onreadystatechange",function(e){s(e,h)}),n.modules[d]=h}return y},o.prototype.getStyle=function(t,n){var o=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return o[o.getPropertyValue?"getPropertyValue":"getAttribute"](n)},o.prototype.link=function(e,o,r){var i=this,u=t.createElement("link"),l=t.getElementsByTagName("head")[0];"string"==typeof o&&(r=o);var s=(r||e).replace(/\.|\//g,""),c=u.id="layuicss-"+s,y=0;return u.rel="stylesheet",u.href=e+(n.debug?"?v="+(new Date).getTime():""),u.media="all",t.getElementById(c)||l.appendChild(u),"function"!=typeof o?i:(function p(){return++y>1e3*n.timeout/100?a(e+" timeout"):void(1989===parseInt(i.getStyle(t.getElementById(c),"width"))?function(){o()}():setTimeout(p,100))}(),i)},n.callback={},o.prototype.factory=function(e){if(layui[e])return"function"==typeof n.callback[e]?n.callback[e]:null},o.prototype.addcss=function(e,t,o){return layui.link(n.dir+"css/"+e,t,o)},o.prototype.img=function(e,t,n){var o=new Image;return o.src=e,o.complete?t(o):(o.onload=function(){o.onload=null,"function"==typeof t&&t(o)},void(o.onerror=function(e){o.onerror=null,"function"==typeof n&&n(e)}))},o.prototype.config=function(e){e=e||{};for(var t in e)n[t]=e[t];return this},o.prototype.modules=function(){var e={};for(var t in u)e[t]=u[t];return e}(),o.prototype.extend=function(e){var t=this;e=e||{};for(var n in e)t[n]||t.modules[n]?a("模块名 "+n+" 已被占用"):t.modules[n]=e[n];return t},o.prototype.router=function(e){var t=this,e=e||location.hash,n={path:[],search:{},hash:(e.match(/[^#](#.*$)/)||[])[1]||""};return/^#\//.test(e)?(e=e.replace(/^#\//,""),n.href="/"+e,e=e.replace(/([^#])(#.*$)/,"$1").split("/")||[],t.each(e,function(e,t){/^\w+=/.test(t)?function(){t=t.split("="),n.search[t[0]]=t[1]}():n.path.push(t)}),n):n},o.prototype.data=function(t,n,o){if(t=t||"layui",o=o||localStorage,e.JSON&&e.JSON.parse){if(null===n)return delete o[t];n="object"==typeof n?n:{key:n};try{var r=JSON.parse(o[t])}catch(a){var r={}}return"value"in n&&(r[n.key]=n.value),n.remove&&delete r[n.key],o[t]=JSON.stringify(r),n.key?r[n.key]:r}},o.prototype.sessionData=function(e,t){return this.data(e,t,sessionStorage)},o.prototype.device=function(t){var n=navigator.userAgent.toLowerCase(),o=function(e){var t=new RegExp(e+"/([^\\s\\_\\-]+)");return e=(n.match(t)||[])[1],e||!1},r={os:function(){return/windows/.test(n)?"windows":/linux/.test(n)?"linux":/iphone|ipod|ipad|ios/.test(n)?"ios":/mac/.test(n)?"mac":void 0}(),ie:function(){return!!(e.ActiveXObject||"ActiveXObject"in e)&&((n.match(/msie\s(\d+)/)||[])[1]||"11")}(),weixin:o("micromessenger")};return t&&!r[t]&&(r[t]=o(t)),r.android=/android/.test(n),r.ios="ios"===r.os,r},o.prototype.hint=function(){return{error:a}},o.prototype.each=function(e,t){var n,o=this;if("function"!=typeof t)return o;if(e=e||[],e.constructor===Object){for(n in e)if(t.call(e[n],n,e[n]))break}else for(n=0;n<e.length&&!t.call(e[n],n,e[n]);n++);return o},o.prototype.sort=function(e,t,n){var o=JSON.parse(JSON.stringify(e||[]));return t?(o.sort(function(e,n){var o=/^-?\d+$/,r=e[t],a=n[t];return o.test(r)&&(r=parseFloat(r)),o.test(a)&&(a=parseFloat(a)),r&&!a?1:!r&&a?-1:r>a?1:r<a?-1:0}),n&&o.reverse(),o):o},o.prototype.stope=function(t){t=t||e.event;try{t.stopPropagation()}catch(n){t.cancelBubble=!0}},o.prototype.onevent=function(e,t,n){return"string"!=typeof e||"function"!=typeof n?this:o.event(e,t,null,n)},o.prototype.event=o.event=function(e,t,o,r){var a=this,i=null,u=t.match(/\((.*)\)$/)||[],l=(e+"."+t).replace(u[0],""),s=u[1]||"",c=function(e,t){var n=t&&t.call(a,o);n===!1&&null===i&&(i=!1)};return r?(n.event[l]=n.event[l]||{},n.event[l][s]=[r],this):(layui.each(n.event[l],function(e,t){return"{*}"===s?void layui.each(t,c):(""===e&&layui.each(t,c),void(e===s&&layui.each(t,c)))}),i)},e.layui=new o}(window);
\ No newline at end of file
diff --git a/src/main/resources/static/ajax/libs/select/select2.css b/ruoyi-admin/src/main/resources/static/ajax/libs/select/select2.css
similarity index 100%
rename from src/main/resources/static/ajax/libs/select/select2.css
rename to ruoyi-admin/src/main/resources/static/ajax/libs/select/select2.css
diff --git a/src/main/resources/static/ajax/libs/select/select2.js b/ruoyi-admin/src/main/resources/static/ajax/libs/select/select2.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/select/select2.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/select/select2.js
diff --git a/src/main/resources/static/ajax/libs/summernote/font/summernote.woff b/ruoyi-admin/src/main/resources/static/ajax/libs/summernote/font/summernote.woff
similarity index 100%
rename from src/main/resources/static/ajax/libs/summernote/font/summernote.woff
rename to ruoyi-admin/src/main/resources/static/ajax/libs/summernote/font/summernote.woff
diff --git a/src/main/resources/static/ajax/libs/summernote/summernote-0.8.8.css b/ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote-0.8.8.css
similarity index 100%
rename from src/main/resources/static/ajax/libs/summernote/summernote-0.8.8.css
rename to ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote-0.8.8.css
diff --git a/src/main/resources/static/ajax/libs/summernote/summernote-bs3.css b/ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote-bs3.css
similarity index 100%
rename from src/main/resources/static/ajax/libs/summernote/summernote-bs3.css
rename to ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote-bs3.css
diff --git a/src/main/resources/static/ajax/libs/summernote/summernote-zh-CN.js b/ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote-zh-CN.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/summernote/summernote-zh-CN.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote-zh-CN.js
diff --git a/src/main/resources/static/ajax/libs/summernote/summernote-zh-CN.min.js b/ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote-zh-CN.min.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/summernote/summernote-zh-CN.min.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote-zh-CN.min.js
diff --git a/src/main/resources/static/ajax/libs/summernote/summernote.css b/ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote.css
similarity index 100%
rename from src/main/resources/static/ajax/libs/summernote/summernote.css
rename to ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote.css
diff --git a/src/main/resources/static/ajax/libs/summernote/summernote.js b/ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/summernote/summernote.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote.js
diff --git a/src/main/resources/static/ajax/libs/summernote/summernote.min.js b/ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote.min.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/summernote/summernote.min.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/summernote/summernote.min.js
diff --git a/src/main/resources/static/ajax/libs/validate/additional-methods.min.js b/ruoyi-admin/src/main/resources/static/ajax/libs/validate/additional-methods.min.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/validate/additional-methods.min.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/validate/additional-methods.min.js
diff --git a/src/main/resources/static/ajax/libs/validate/jquery.validate.extend.js b/ruoyi-admin/src/main/resources/static/ajax/libs/validate/jquery.validate.extend.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/validate/jquery.validate.extend.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/validate/jquery.validate.extend.js
diff --git a/src/main/resources/static/ajax/libs/validate/jquery.validate.min.js b/ruoyi-admin/src/main/resources/static/ajax/libs/validate/jquery.validate.min.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/validate/jquery.validate.min.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/validate/jquery.validate.min.js
diff --git a/src/main/resources/static/ajax/libs/validate/messages_zh.min.js b/ruoyi-admin/src/main/resources/static/ajax/libs/validate/messages_zh.min.js
similarity index 100%
rename from src/main/resources/static/ajax/libs/validate/messages_zh.min.js
rename to ruoyi-admin/src/main/resources/static/ajax/libs/validate/messages_zh.min.js
diff --git a/src/main/resources/static/css/animate.css b/ruoyi-admin/src/main/resources/static/css/animate.css
similarity index 100%
rename from src/main/resources/static/css/animate.css
rename to ruoyi-admin/src/main/resources/static/css/animate.css
diff --git a/src/main/resources/static/css/bootstrap.min.css b/ruoyi-admin/src/main/resources/static/css/bootstrap.min.css
similarity index 100%
rename from src/main/resources/static/css/bootstrap.min.css
rename to ruoyi-admin/src/main/resources/static/css/bootstrap.min.css
diff --git a/src/main/resources/static/css/font-awesome.min.css b/ruoyi-admin/src/main/resources/static/css/font-awesome.min.css
similarity index 100%
rename from src/main/resources/static/css/font-awesome.min.css
rename to ruoyi-admin/src/main/resources/static/css/font-awesome.min.css
diff --git a/src/main/resources/static/css/login.css b/ruoyi-admin/src/main/resources/static/css/login.css
similarity index 100%
rename from src/main/resources/static/css/login.css
rename to ruoyi-admin/src/main/resources/static/css/login.css
diff --git a/src/main/resources/static/css/login.min.css b/ruoyi-admin/src/main/resources/static/css/login.min.css
similarity index 100%
rename from src/main/resources/static/css/login.min.css
rename to ruoyi-admin/src/main/resources/static/css/login.min.css
diff --git a/src/main/resources/static/css/main/animate.min.css b/ruoyi-admin/src/main/resources/static/css/main/animate.min.css
similarity index 100%
rename from src/main/resources/static/css/main/animate.min.css
rename to ruoyi-admin/src/main/resources/static/css/main/animate.min.css
diff --git a/src/main/resources/static/css/main/bootstrap.min14ed.css b/ruoyi-admin/src/main/resources/static/css/main/bootstrap.min14ed.css
similarity index 100%
rename from src/main/resources/static/css/main/bootstrap.min14ed.css
rename to ruoyi-admin/src/main/resources/static/css/main/bootstrap.min14ed.css
diff --git a/src/main/resources/static/css/main/font-awesome.min93e3.css b/ruoyi-admin/src/main/resources/static/css/main/font-awesome.min93e3.css
similarity index 100%
rename from src/main/resources/static/css/main/font-awesome.min93e3.css
rename to ruoyi-admin/src/main/resources/static/css/main/font-awesome.min93e3.css
diff --git a/src/main/resources/static/css/main/style.min862f.css b/ruoyi-admin/src/main/resources/static/css/main/style.min862f.css
similarity index 100%
rename from src/main/resources/static/css/main/style.min862f.css
rename to ruoyi-admin/src/main/resources/static/css/main/style.min862f.css
diff --git a/src/main/resources/static/css/patterns/header-profile-skin-blue.png b/ruoyi-admin/src/main/resources/static/css/patterns/header-profile-skin-blue.png
similarity index 100%
rename from src/main/resources/static/css/patterns/header-profile-skin-blue.png
rename to ruoyi-admin/src/main/resources/static/css/patterns/header-profile-skin-blue.png
diff --git a/src/main/resources/static/css/patterns/header-profile-skin-yellow.png b/ruoyi-admin/src/main/resources/static/css/patterns/header-profile-skin-yellow.png
similarity index 100%
rename from src/main/resources/static/css/patterns/header-profile-skin-yellow.png
rename to ruoyi-admin/src/main/resources/static/css/patterns/header-profile-skin-yellow.png
diff --git a/src/main/resources/static/css/patterns/header-profile.png b/ruoyi-admin/src/main/resources/static/css/patterns/header-profile.png
similarity index 100%
rename from src/main/resources/static/css/patterns/header-profile.png
rename to ruoyi-admin/src/main/resources/static/css/patterns/header-profile.png
diff --git a/src/main/resources/static/css/patterns/shattered.png b/ruoyi-admin/src/main/resources/static/css/patterns/shattered.png
similarity index 100%
rename from src/main/resources/static/css/patterns/shattered.png
rename to ruoyi-admin/src/main/resources/static/css/patterns/shattered.png
diff --git a/src/main/resources/static/css/style.css b/ruoyi-admin/src/main/resources/static/css/style.css
similarity index 100%
rename from src/main/resources/static/css/style.css
rename to ruoyi-admin/src/main/resources/static/css/style.css
diff --git a/src/main/resources/static/favicon.ico b/ruoyi-admin/src/main/resources/static/favicon.ico
similarity index 100%
rename from src/main/resources/static/favicon.ico
rename to ruoyi-admin/src/main/resources/static/favicon.ico
diff --git a/src/main/resources/static/file/rml.txt b/ruoyi-admin/src/main/resources/static/file/rml.txt
similarity index 100%
rename from src/main/resources/static/file/rml.txt
rename to ruoyi-admin/src/main/resources/static/file/rml.txt
diff --git a/src/main/resources/static/fonts/FontAwesome.otf b/ruoyi-admin/src/main/resources/static/fonts/FontAwesome.otf
similarity index 100%
rename from src/main/resources/static/fonts/FontAwesome.otf
rename to ruoyi-admin/src/main/resources/static/fonts/FontAwesome.otf
diff --git a/src/main/resources/static/fonts/Simple-Line-Icons.woff2 b/ruoyi-admin/src/main/resources/static/fonts/Simple-Line-Icons.woff2
similarity index 100%
rename from src/main/resources/static/fonts/Simple-Line-Icons.woff2
rename to ruoyi-admin/src/main/resources/static/fonts/Simple-Line-Icons.woff2
diff --git a/src/main/resources/static/fonts/fontawesome-webfont.eot b/ruoyi-admin/src/main/resources/static/fonts/fontawesome-webfont.eot
similarity index 100%
rename from src/main/resources/static/fonts/fontawesome-webfont.eot
rename to ruoyi-admin/src/main/resources/static/fonts/fontawesome-webfont.eot
diff --git a/src/main/resources/static/fonts/fontawesome-webfont.svg b/ruoyi-admin/src/main/resources/static/fonts/fontawesome-webfont.svg
similarity index 100%
rename from src/main/resources/static/fonts/fontawesome-webfont.svg
rename to ruoyi-admin/src/main/resources/static/fonts/fontawesome-webfont.svg
diff --git a/src/main/resources/static/fonts/fontawesome-webfont.ttf b/ruoyi-admin/src/main/resources/static/fonts/fontawesome-webfont.ttf
similarity index 100%
rename from src/main/resources/static/fonts/fontawesome-webfont.ttf
rename to ruoyi-admin/src/main/resources/static/fonts/fontawesome-webfont.ttf
diff --git a/src/main/resources/static/fonts/fontawesome-webfont.woff b/ruoyi-admin/src/main/resources/static/fonts/fontawesome-webfont.woff
similarity index 100%
rename from src/main/resources/static/fonts/fontawesome-webfont.woff
rename to ruoyi-admin/src/main/resources/static/fonts/fontawesome-webfont.woff
diff --git a/src/main/resources/static/fonts/fontawesome-webfont.woff2 b/ruoyi-admin/src/main/resources/static/fonts/fontawesome-webfont.woff2
similarity index 100%
rename from src/main/resources/static/fonts/fontawesome-webfont.woff2
rename to ruoyi-admin/src/main/resources/static/fonts/fontawesome-webfont.woff2
diff --git a/src/main/resources/static/fonts/glyphicons-halflings-regular.eot b/ruoyi-admin/src/main/resources/static/fonts/glyphicons-halflings-regular.eot
similarity index 100%
rename from src/main/resources/static/fonts/glyphicons-halflings-regular.eot
rename to ruoyi-admin/src/main/resources/static/fonts/glyphicons-halflings-regular.eot
diff --git a/src/main/resources/static/fonts/glyphicons-halflings-regular.svg b/ruoyi-admin/src/main/resources/static/fonts/glyphicons-halflings-regular.svg
similarity index 100%
rename from src/main/resources/static/fonts/glyphicons-halflings-regular.svg
rename to ruoyi-admin/src/main/resources/static/fonts/glyphicons-halflings-regular.svg
diff --git a/src/main/resources/static/fonts/glyphicons-halflings-regular.ttf b/ruoyi-admin/src/main/resources/static/fonts/glyphicons-halflings-regular.ttf
similarity index 100%
rename from src/main/resources/static/fonts/glyphicons-halflings-regular.ttf
rename to ruoyi-admin/src/main/resources/static/fonts/glyphicons-halflings-regular.ttf
diff --git a/src/main/resources/static/fonts/glyphicons-halflings-regular.woff b/ruoyi-admin/src/main/resources/static/fonts/glyphicons-halflings-regular.woff
similarity index 100%
rename from src/main/resources/static/fonts/glyphicons-halflings-regular.woff
rename to ruoyi-admin/src/main/resources/static/fonts/glyphicons-halflings-regular.woff
diff --git a/src/main/resources/static/fonts/glyphicons-halflings-regular.woff2 b/ruoyi-admin/src/main/resources/static/fonts/glyphicons-halflings-regular.woff2
similarity index 100%
rename from src/main/resources/static/fonts/glyphicons-halflings-regular.woff2
rename to ruoyi-admin/src/main/resources/static/fonts/glyphicons-halflings-regular.woff2
diff --git a/src/main/resources/static/img/blue.png b/ruoyi-admin/src/main/resources/static/img/blue.png
similarity index 100%
rename from src/main/resources/static/img/blue.png
rename to ruoyi-admin/src/main/resources/static/img/blue.png
diff --git a/src/main/resources/static/img/loading-upload.gif b/ruoyi-admin/src/main/resources/static/img/loading-upload.gif
similarity index 100%
rename from src/main/resources/static/img/loading-upload.gif
rename to ruoyi-admin/src/main/resources/static/img/loading-upload.gif
diff --git a/src/main/resources/static/img/loading.gif b/ruoyi-admin/src/main/resources/static/img/loading.gif
similarity index 100%
rename from src/main/resources/static/img/loading.gif
rename to ruoyi-admin/src/main/resources/static/img/loading.gif
diff --git a/src/main/resources/static/img/locked.png b/ruoyi-admin/src/main/resources/static/img/locked.png
similarity index 100%
rename from src/main/resources/static/img/locked.png
rename to ruoyi-admin/src/main/resources/static/img/locked.png
diff --git a/src/main/resources/static/img/login-background.jpg b/ruoyi-admin/src/main/resources/static/img/login-background.jpg
similarity index 100%
rename from src/main/resources/static/img/login-background.jpg
rename to ruoyi-admin/src/main/resources/static/img/login-background.jpg
diff --git a/src/main/resources/static/img/pay.png b/ruoyi-admin/src/main/resources/static/img/pay.png
similarity index 100%
rename from src/main/resources/static/img/pay.png
rename to ruoyi-admin/src/main/resources/static/img/pay.png
diff --git a/src/main/resources/static/img/profile.jpg b/ruoyi-admin/src/main/resources/static/img/profile.jpg
similarity index 100%
rename from src/main/resources/static/img/profile.jpg
rename to ruoyi-admin/src/main/resources/static/img/profile.jpg
diff --git a/src/main/resources/static/img/progress.png b/ruoyi-admin/src/main/resources/static/img/progress.png
similarity index 100%
rename from src/main/resources/static/img/progress.png
rename to ruoyi-admin/src/main/resources/static/img/progress.png
diff --git a/src/main/resources/static/img/qr_code.png b/ruoyi-admin/src/main/resources/static/img/qr_code.png
similarity index 100%
rename from src/main/resources/static/img/qr_code.png
rename to ruoyi-admin/src/main/resources/static/img/qr_code.png
diff --git a/src/main/resources/static/img/user.png b/ruoyi-admin/src/main/resources/static/img/user.png
similarity index 100%
rename from src/main/resources/static/img/user.png
rename to ruoyi-admin/src/main/resources/static/img/user.png
diff --git a/src/main/resources/static/js/bootstrap.min.js b/ruoyi-admin/src/main/resources/static/js/bootstrap.min.js
similarity index 100%
rename from src/main/resources/static/js/bootstrap.min.js
rename to ruoyi-admin/src/main/resources/static/js/bootstrap.min.js
diff --git a/src/main/resources/static/js/jquery-ui-1.10.4.min.js b/ruoyi-admin/src/main/resources/static/js/jquery-ui-1.10.4.min.js
similarity index 100%
rename from src/main/resources/static/js/jquery-ui-1.10.4.min.js
rename to ruoyi-admin/src/main/resources/static/js/jquery-ui-1.10.4.min.js
diff --git a/src/main/resources/static/js/jquery.min.js b/ruoyi-admin/src/main/resources/static/js/jquery.min.js
similarity index 100%
rename from src/main/resources/static/js/jquery.min.js
rename to ruoyi-admin/src/main/resources/static/js/jquery.min.js
diff --git a/src/main/resources/static/js/plugins/metisMenu/jquery.metisMenu.js b/ruoyi-admin/src/main/resources/static/js/plugins/metisMenu/jquery.metisMenu.js
similarity index 100%
rename from src/main/resources/static/js/plugins/metisMenu/jquery.metisMenu.js
rename to ruoyi-admin/src/main/resources/static/js/plugins/metisMenu/jquery.metisMenu.js
diff --git a/src/main/resources/static/js/plugins/slimscroll/jquery.slimscroll.min.js b/ruoyi-admin/src/main/resources/static/js/plugins/slimscroll/jquery.slimscroll.min.js
similarity index 100%
rename from src/main/resources/static/js/plugins/slimscroll/jquery.slimscroll.min.js
rename to ruoyi-admin/src/main/resources/static/js/plugins/slimscroll/jquery.slimscroll.min.js
diff --git a/src/main/resources/static/ruoyi.png b/ruoyi-admin/src/main/resources/static/ruoyi.png
similarity index 100%
rename from src/main/resources/static/ruoyi.png
rename to ruoyi-admin/src/main/resources/static/ruoyi.png
diff --git a/src/main/resources/static/ruoyi/css/ry-ui.css b/ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css
similarity index 100%
rename from src/main/resources/static/ruoyi/css/ry-ui.css
rename to ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css
diff --git a/src/main/resources/static/ruoyi/index.js b/ruoyi-admin/src/main/resources/static/ruoyi/index.js
similarity index 100%
rename from src/main/resources/static/ruoyi/index.js
rename to ruoyi-admin/src/main/resources/static/ruoyi/index.js
diff --git a/src/main/resources/static/ruoyi/js/common.js b/ruoyi-admin/src/main/resources/static/ruoyi/js/common.js
similarity index 100%
rename from src/main/resources/static/ruoyi/js/common.js
rename to ruoyi-admin/src/main/resources/static/ruoyi/js/common.js
diff --git a/src/main/resources/static/ruoyi/js/ry-ui.js b/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js
similarity index 100%
rename from src/main/resources/static/ruoyi/js/ry-ui.js
rename to ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js
diff --git a/src/main/resources/static/ruoyi/login.js b/ruoyi-admin/src/main/resources/static/ruoyi/login.js
similarity index 100%
rename from src/main/resources/static/ruoyi/login.js
rename to ruoyi-admin/src/main/resources/static/ruoyi/login.js
diff --git a/src/main/resources/templates/error/404.html b/ruoyi-admin/src/main/resources/templates/error/404.html
similarity index 100%
rename from src/main/resources/templates/error/404.html
rename to ruoyi-admin/src/main/resources/templates/error/404.html
diff --git a/src/main/resources/templates/error/500.html b/ruoyi-admin/src/main/resources/templates/error/500.html
similarity index 100%
rename from src/main/resources/templates/error/500.html
rename to ruoyi-admin/src/main/resources/templates/error/500.html
diff --git a/src/main/resources/templates/error/unauth.html b/ruoyi-admin/src/main/resources/templates/error/unauth.html
similarity index 100%
rename from src/main/resources/templates/error/unauth.html
rename to ruoyi-admin/src/main/resources/templates/error/unauth.html
diff --git a/src/main/resources/templates/include.html b/ruoyi-admin/src/main/resources/templates/include.html
similarity index 100%
rename from src/main/resources/templates/include.html
rename to ruoyi-admin/src/main/resources/templates/include.html
diff --git a/src/main/resources/templates/index.html b/ruoyi-admin/src/main/resources/templates/index.html
similarity index 100%
rename from src/main/resources/templates/index.html
rename to ruoyi-admin/src/main/resources/templates/index.html
diff --git a/src/main/resources/templates/login.html b/ruoyi-admin/src/main/resources/templates/login.html
similarity index 100%
rename from src/main/resources/templates/login.html
rename to ruoyi-admin/src/main/resources/templates/login.html
diff --git a/src/main/resources/templates/main.html b/ruoyi-admin/src/main/resources/templates/main.html
similarity index 97%
rename from src/main/resources/templates/main.html
rename to ruoyi-admin/src/main/resources/templates/main.html
index 8226d388..2391619a 100644
--- a/src/main/resources/templates/main.html
+++ b/ruoyi-admin/src/main/resources/templates/main.html
@@ -16,8 +16,8 @@
     <div class="row  border-bottom white-bg dashboard-header">
         <div class="col-sm-12">
             <blockquote class="text-warning" style="font-size:14px">
-                                          阿里云优惠活动(2CPU 4GRAM 1M带宽 40G高效云盘)
-                <br><a target="_blank" href="https://promotion.aliyun.com/ntms/act/vm/aliyun-group/buy.html?group=BphATfDhsQ">https://promotion.aliyun.com/ntms/act/vm/aliyun-group/buy.html?group=BphATfDhsQ</a>…
+                高性能云服务器2折起
+                <br><a target="_blank" href="https://promotion.aliyun.com/ntms/act/qwbk.html?userCode=brki8iof">https://promotion.aliyun.com/ntms/act/qwbk.html?userCode=brki8iof</a>
                 <br>云产品通用代金券,可叠加官网常规优惠使用
                 <br><a target="_blank" href="https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=brki8iof">https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=brki8iof</a>…
                 <h4 class="text-danger">限时活动推广。</h4>
diff --git a/src/main/resources/templates/monitor/job/add.html b/ruoyi-admin/src/main/resources/templates/monitor/job/add.html
similarity index 100%
rename from src/main/resources/templates/monitor/job/add.html
rename to ruoyi-admin/src/main/resources/templates/monitor/job/add.html
diff --git a/src/main/resources/templates/monitor/job/edit.html b/ruoyi-admin/src/main/resources/templates/monitor/job/edit.html
similarity index 100%
rename from src/main/resources/templates/monitor/job/edit.html
rename to ruoyi-admin/src/main/resources/templates/monitor/job/edit.html
diff --git a/src/main/resources/templates/monitor/job/job.html b/ruoyi-admin/src/main/resources/templates/monitor/job/job.html
similarity index 100%
rename from src/main/resources/templates/monitor/job/job.html
rename to ruoyi-admin/src/main/resources/templates/monitor/job/job.html
diff --git a/src/main/resources/templates/monitor/job/jobLog.html b/ruoyi-admin/src/main/resources/templates/monitor/job/jobLog.html
similarity index 100%
rename from src/main/resources/templates/monitor/job/jobLog.html
rename to ruoyi-admin/src/main/resources/templates/monitor/job/jobLog.html
diff --git a/src/main/resources/templates/monitor/logininfor/logininfor.html b/ruoyi-admin/src/main/resources/templates/monitor/logininfor/logininfor.html
similarity index 100%
rename from src/main/resources/templates/monitor/logininfor/logininfor.html
rename to ruoyi-admin/src/main/resources/templates/monitor/logininfor/logininfor.html
diff --git a/src/main/resources/templates/monitor/online/online.html b/ruoyi-admin/src/main/resources/templates/monitor/online/online.html
similarity index 100%
rename from src/main/resources/templates/monitor/online/online.html
rename to ruoyi-admin/src/main/resources/templates/monitor/online/online.html
diff --git a/src/main/resources/templates/monitor/operlog/detail.html b/ruoyi-admin/src/main/resources/templates/monitor/operlog/detail.html
similarity index 100%
rename from src/main/resources/templates/monitor/operlog/detail.html
rename to ruoyi-admin/src/main/resources/templates/monitor/operlog/detail.html
diff --git a/src/main/resources/templates/monitor/operlog/operlog.html b/ruoyi-admin/src/main/resources/templates/monitor/operlog/operlog.html
similarity index 100%
rename from src/main/resources/templates/monitor/operlog/operlog.html
rename to ruoyi-admin/src/main/resources/templates/monitor/operlog/operlog.html
diff --git a/src/main/resources/templates/system/config/add.html b/ruoyi-admin/src/main/resources/templates/system/config/add.html
similarity index 100%
rename from src/main/resources/templates/system/config/add.html
rename to ruoyi-admin/src/main/resources/templates/system/config/add.html
diff --git a/src/main/resources/templates/system/config/config.html b/ruoyi-admin/src/main/resources/templates/system/config/config.html
similarity index 100%
rename from src/main/resources/templates/system/config/config.html
rename to ruoyi-admin/src/main/resources/templates/system/config/config.html
diff --git a/src/main/resources/templates/system/config/edit.html b/ruoyi-admin/src/main/resources/templates/system/config/edit.html
similarity index 100%
rename from src/main/resources/templates/system/config/edit.html
rename to ruoyi-admin/src/main/resources/templates/system/config/edit.html
diff --git a/src/main/resources/templates/system/dept/add.html b/ruoyi-admin/src/main/resources/templates/system/dept/add.html
similarity index 100%
rename from src/main/resources/templates/system/dept/add.html
rename to ruoyi-admin/src/main/resources/templates/system/dept/add.html
diff --git a/src/main/resources/templates/system/dept/dept.html b/ruoyi-admin/src/main/resources/templates/system/dept/dept.html
similarity index 100%
rename from src/main/resources/templates/system/dept/dept.html
rename to ruoyi-admin/src/main/resources/templates/system/dept/dept.html
diff --git a/src/main/resources/templates/system/dept/edit.html b/ruoyi-admin/src/main/resources/templates/system/dept/edit.html
similarity index 100%
rename from src/main/resources/templates/system/dept/edit.html
rename to ruoyi-admin/src/main/resources/templates/system/dept/edit.html
diff --git a/src/main/resources/templates/system/dept/tree.html b/ruoyi-admin/src/main/resources/templates/system/dept/tree.html
similarity index 100%
rename from src/main/resources/templates/system/dept/tree.html
rename to ruoyi-admin/src/main/resources/templates/system/dept/tree.html
diff --git a/src/main/resources/templates/system/dict/data/add.html b/ruoyi-admin/src/main/resources/templates/system/dict/data/add.html
similarity index 100%
rename from src/main/resources/templates/system/dict/data/add.html
rename to ruoyi-admin/src/main/resources/templates/system/dict/data/add.html
diff --git a/src/main/resources/templates/system/dict/data/data.html b/ruoyi-admin/src/main/resources/templates/system/dict/data/data.html
similarity index 100%
rename from src/main/resources/templates/system/dict/data/data.html
rename to ruoyi-admin/src/main/resources/templates/system/dict/data/data.html
diff --git a/src/main/resources/templates/system/dict/data/edit.html b/ruoyi-admin/src/main/resources/templates/system/dict/data/edit.html
similarity index 100%
rename from src/main/resources/templates/system/dict/data/edit.html
rename to ruoyi-admin/src/main/resources/templates/system/dict/data/edit.html
diff --git a/src/main/resources/templates/system/dict/type/add.html b/ruoyi-admin/src/main/resources/templates/system/dict/type/add.html
similarity index 100%
rename from src/main/resources/templates/system/dict/type/add.html
rename to ruoyi-admin/src/main/resources/templates/system/dict/type/add.html
diff --git a/src/main/resources/templates/system/dict/type/edit.html b/ruoyi-admin/src/main/resources/templates/system/dict/type/edit.html
similarity index 100%
rename from src/main/resources/templates/system/dict/type/edit.html
rename to ruoyi-admin/src/main/resources/templates/system/dict/type/edit.html
diff --git a/src/main/resources/templates/system/dict/type/type.html b/ruoyi-admin/src/main/resources/templates/system/dict/type/type.html
similarity index 100%
rename from src/main/resources/templates/system/dict/type/type.html
rename to ruoyi-admin/src/main/resources/templates/system/dict/type/type.html
diff --git a/src/main/resources/templates/system/menu/add.html b/ruoyi-admin/src/main/resources/templates/system/menu/add.html
similarity index 100%
rename from src/main/resources/templates/system/menu/add.html
rename to ruoyi-admin/src/main/resources/templates/system/menu/add.html
diff --git a/src/main/resources/templates/system/menu/edit.html b/ruoyi-admin/src/main/resources/templates/system/menu/edit.html
similarity index 100%
rename from src/main/resources/templates/system/menu/edit.html
rename to ruoyi-admin/src/main/resources/templates/system/menu/edit.html
diff --git a/src/main/resources/templates/system/menu/icon.html b/ruoyi-admin/src/main/resources/templates/system/menu/icon.html
similarity index 100%
rename from src/main/resources/templates/system/menu/icon.html
rename to ruoyi-admin/src/main/resources/templates/system/menu/icon.html
diff --git a/src/main/resources/templates/system/menu/menu.html b/ruoyi-admin/src/main/resources/templates/system/menu/menu.html
similarity index 100%
rename from src/main/resources/templates/system/menu/menu.html
rename to ruoyi-admin/src/main/resources/templates/system/menu/menu.html
diff --git a/src/main/resources/templates/system/menu/tree.html b/ruoyi-admin/src/main/resources/templates/system/menu/tree.html
similarity index 100%
rename from src/main/resources/templates/system/menu/tree.html
rename to ruoyi-admin/src/main/resources/templates/system/menu/tree.html
diff --git a/src/main/resources/templates/system/notice/add.html b/ruoyi-admin/src/main/resources/templates/system/notice/add.html
similarity index 100%
rename from src/main/resources/templates/system/notice/add.html
rename to ruoyi-admin/src/main/resources/templates/system/notice/add.html
diff --git a/src/main/resources/templates/system/notice/edit.html b/ruoyi-admin/src/main/resources/templates/system/notice/edit.html
similarity index 100%
rename from src/main/resources/templates/system/notice/edit.html
rename to ruoyi-admin/src/main/resources/templates/system/notice/edit.html
diff --git a/src/main/resources/templates/system/notice/notice.html b/ruoyi-admin/src/main/resources/templates/system/notice/notice.html
similarity index 100%
rename from src/main/resources/templates/system/notice/notice.html
rename to ruoyi-admin/src/main/resources/templates/system/notice/notice.html
diff --git a/src/main/resources/templates/system/post/add.html b/ruoyi-admin/src/main/resources/templates/system/post/add.html
similarity index 100%
rename from src/main/resources/templates/system/post/add.html
rename to ruoyi-admin/src/main/resources/templates/system/post/add.html
diff --git a/src/main/resources/templates/system/post/edit.html b/ruoyi-admin/src/main/resources/templates/system/post/edit.html
similarity index 100%
rename from src/main/resources/templates/system/post/edit.html
rename to ruoyi-admin/src/main/resources/templates/system/post/edit.html
diff --git a/src/main/resources/templates/system/post/post.html b/ruoyi-admin/src/main/resources/templates/system/post/post.html
similarity index 100%
rename from src/main/resources/templates/system/post/post.html
rename to ruoyi-admin/src/main/resources/templates/system/post/post.html
diff --git a/src/main/resources/templates/system/role/add.html b/ruoyi-admin/src/main/resources/templates/system/role/add.html
similarity index 100%
rename from src/main/resources/templates/system/role/add.html
rename to ruoyi-admin/src/main/resources/templates/system/role/add.html
diff --git a/src/main/resources/templates/system/role/edit.html b/ruoyi-admin/src/main/resources/templates/system/role/edit.html
similarity index 100%
rename from src/main/resources/templates/system/role/edit.html
rename to ruoyi-admin/src/main/resources/templates/system/role/edit.html
diff --git a/src/main/resources/templates/system/role/role.html b/ruoyi-admin/src/main/resources/templates/system/role/role.html
similarity index 100%
rename from src/main/resources/templates/system/role/role.html
rename to ruoyi-admin/src/main/resources/templates/system/role/role.html
diff --git a/src/main/resources/templates/system/role/rule.html b/ruoyi-admin/src/main/resources/templates/system/role/rule.html
similarity index 100%
rename from src/main/resources/templates/system/role/rule.html
rename to ruoyi-admin/src/main/resources/templates/system/role/rule.html
diff --git a/src/main/resources/templates/system/user/add.html b/ruoyi-admin/src/main/resources/templates/system/user/add.html
similarity index 100%
rename from src/main/resources/templates/system/user/add.html
rename to ruoyi-admin/src/main/resources/templates/system/user/add.html
diff --git a/src/main/resources/templates/system/user/edit.html b/ruoyi-admin/src/main/resources/templates/system/user/edit.html
similarity index 100%
rename from src/main/resources/templates/system/user/edit.html
rename to ruoyi-admin/src/main/resources/templates/system/user/edit.html
diff --git a/src/main/resources/templates/system/user/profile/avatar.html b/ruoyi-admin/src/main/resources/templates/system/user/profile/avatar.html
similarity index 100%
rename from src/main/resources/templates/system/user/profile/avatar.html
rename to ruoyi-admin/src/main/resources/templates/system/user/profile/avatar.html
diff --git a/src/main/resources/templates/system/user/profile/edit.html b/ruoyi-admin/src/main/resources/templates/system/user/profile/edit.html
similarity index 100%
rename from src/main/resources/templates/system/user/profile/edit.html
rename to ruoyi-admin/src/main/resources/templates/system/user/profile/edit.html
diff --git a/src/main/resources/templates/system/user/profile/profile.html b/ruoyi-admin/src/main/resources/templates/system/user/profile/profile.html
similarity index 100%
rename from src/main/resources/templates/system/user/profile/profile.html
rename to ruoyi-admin/src/main/resources/templates/system/user/profile/profile.html
diff --git a/src/main/resources/templates/system/user/profile/resetPwd.html b/ruoyi-admin/src/main/resources/templates/system/user/profile/resetPwd.html
similarity index 100%
rename from src/main/resources/templates/system/user/profile/resetPwd.html
rename to ruoyi-admin/src/main/resources/templates/system/user/profile/resetPwd.html
diff --git a/src/main/resources/templates/system/user/resetPwd.html b/ruoyi-admin/src/main/resources/templates/system/user/resetPwd.html
similarity index 100%
rename from src/main/resources/templates/system/user/resetPwd.html
rename to ruoyi-admin/src/main/resources/templates/system/user/resetPwd.html
diff --git a/src/main/resources/templates/system/user/user.html b/ruoyi-admin/src/main/resources/templates/system/user/user.html
similarity index 100%
rename from src/main/resources/templates/system/user/user.html
rename to ruoyi-admin/src/main/resources/templates/system/user/user.html
diff --git a/src/main/resources/templates/tool/build/build.html b/ruoyi-admin/src/main/resources/templates/tool/build/build.html
similarity index 100%
rename from src/main/resources/templates/tool/build/build.html
rename to ruoyi-admin/src/main/resources/templates/tool/build/build.html
diff --git a/src/main/resources/templates/tool/gen/gen.html b/ruoyi-admin/src/main/resources/templates/tool/gen/gen.html
similarity index 100%
rename from src/main/resources/templates/tool/gen/gen.html
rename to ruoyi-admin/src/main/resources/templates/tool/gen/gen.html
diff --git a/src/main/resources/templates/vm/html/add.html.vm b/ruoyi-admin/src/main/resources/templates/vm/html/add.html.vm
similarity index 100%
rename from src/main/resources/templates/vm/html/add.html.vm
rename to ruoyi-admin/src/main/resources/templates/vm/html/add.html.vm
diff --git a/src/main/resources/templates/vm/html/edit.html.vm b/ruoyi-admin/src/main/resources/templates/vm/html/edit.html.vm
similarity index 100%
rename from src/main/resources/templates/vm/html/edit.html.vm
rename to ruoyi-admin/src/main/resources/templates/vm/html/edit.html.vm
diff --git a/src/main/resources/templates/vm/html/list.html.vm b/ruoyi-admin/src/main/resources/templates/vm/html/list.html.vm
similarity index 100%
rename from src/main/resources/templates/vm/html/list.html.vm
rename to ruoyi-admin/src/main/resources/templates/vm/html/list.html.vm
diff --git a/src/main/resources/templates/vm/java/Controller.java.vm b/ruoyi-admin/src/main/resources/templates/vm/java/Controller.java.vm
similarity index 100%
rename from src/main/resources/templates/vm/java/Controller.java.vm
rename to ruoyi-admin/src/main/resources/templates/vm/java/Controller.java.vm
diff --git a/src/main/resources/templates/vm/java/Mapper.java.vm b/ruoyi-admin/src/main/resources/templates/vm/java/Mapper.java.vm
similarity index 100%
rename from src/main/resources/templates/vm/java/Mapper.java.vm
rename to ruoyi-admin/src/main/resources/templates/vm/java/Mapper.java.vm
diff --git a/src/main/resources/templates/vm/java/Service.java.vm b/ruoyi-admin/src/main/resources/templates/vm/java/Service.java.vm
similarity index 100%
rename from src/main/resources/templates/vm/java/Service.java.vm
rename to ruoyi-admin/src/main/resources/templates/vm/java/Service.java.vm
diff --git a/src/main/resources/templates/vm/java/ServiceImpl.java.vm b/ruoyi-admin/src/main/resources/templates/vm/java/ServiceImpl.java.vm
similarity index 100%
rename from src/main/resources/templates/vm/java/ServiceImpl.java.vm
rename to ruoyi-admin/src/main/resources/templates/vm/java/ServiceImpl.java.vm
diff --git a/src/main/resources/templates/vm/java/domain.java.vm b/ruoyi-admin/src/main/resources/templates/vm/java/domain.java.vm
similarity index 100%
rename from src/main/resources/templates/vm/java/domain.java.vm
rename to ruoyi-admin/src/main/resources/templates/vm/java/domain.java.vm
diff --git a/src/main/resources/templates/vm/sql/sql.vm b/ruoyi-admin/src/main/resources/templates/vm/sql/sql.vm
similarity index 100%
rename from src/main/resources/templates/vm/sql/sql.vm
rename to ruoyi-admin/src/main/resources/templates/vm/sql/sql.vm
diff --git a/src/main/resources/templates/vm/xml/Mapper.xml.vm b/ruoyi-admin/src/main/resources/templates/vm/xml/Mapper.xml.vm
similarity index 100%
rename from src/main/resources/templates/vm/xml/Mapper.xml.vm
rename to ruoyi-admin/src/main/resources/templates/vm/xml/Mapper.xml.vm
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
new file mode 100644
index 00000000..b2fbbe73
--- /dev/null
+++ b/ruoyi-common/pom.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ruoyi</artifactId>
+        <groupId>com.ruoyi</groupId>
+        <version>3.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+	
+    <artifactId>ruoyi-common</artifactId>
+	
+	<description>
+	    common通用工具
+	</description>
+
+    <properties>
+        <commons.io.version>2.5</commons.io.version>
+		<commons.fileupload.version>1.3.3</commons.fileupload.version>
+		<jsoup.version>1.11.3</jsoup.version>
+		<poi.version>3.17</poi.version>
+    </properties>
+
+    <dependencies>
+    
+        <!--常用工具类 -->
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-lang3</artifactId>
+		</dependency>
+		
+		<!-- JSON工具类 -->
+		<dependency>
+		    <groupId>com.fasterxml.jackson.core</groupId>
+		    <artifactId>jackson-databind</artifactId>
+		</dependency>
+
+		<!--io常用工具类 -->
+		<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+			<version>${commons.io.version}</version>
+		</dependency>
+
+		<!--文件上传工具类 -->
+		<dependency>
+			<groupId>commons-fileupload</groupId>
+			<artifactId>commons-fileupload</artifactId>
+			<version>${commons.fileupload.version}</version>
+		</dependency>
+		
+		<!-- HTML解析器 -->
+		<dependency>
+			<groupId>org.jsoup</groupId>
+			<artifactId>jsoup</artifactId>
+			<version>${jsoup.version}</version>
+		</dependency>
+		
+		<!-- excel工具 -->
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi-ooxml</artifactId>
+			<version>${poi.version}</version>
+		</dependency>
+		
+		<dependency>
+		    <groupId>org.yaml</groupId>
+		    <artifactId>snakeyaml</artifactId>
+		</dependency>
+		
+    </dependencies>
+  
+</project>
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/DataScope.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java
similarity index 85%
rename from src/main/java/com/ruoyi/framework/aspectj/lang/annotation/DataScope.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java
index 07ac5b19..86788b96 100644
--- a/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/DataScope.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java
@@ -1,4 +1,4 @@
-package com.ruoyi.framework.aspectj.lang.annotation;
+package com.ruoyi.common.annotation;
 
 import java.lang.annotation.Documented;
 import java.lang.annotation.ElementType;
diff --git a/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/DataSource.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java
similarity index 78%
rename from src/main/java/com/ruoyi/framework/aspectj/lang/annotation/DataSource.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java
index 89ec9ec5..5a41a2c6 100644
--- a/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/DataSource.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java
@@ -1,23 +1,22 @@
-package com.ruoyi.framework.aspectj.lang.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import com.ruoyi.framework.aspectj.lang.enums.DataSourceType;
-
-/**
- * 自定义多数据源切换注解
- * 
- * @author ruoyi
- */
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface DataSource
-{
-    /**
-     * 切换数据源名称
-     */
-    public DataSourceType value() default DataSourceType.MASTER;
-}
+package com.ruoyi.common.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import com.ruoyi.common.enums.DataSourceType;
+
+/**
+ * 自定义多数据源切换注解
+ * 
+ * @author ruoyi
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface DataSource
+{
+    /**
+     * 切换数据源名称
+     */
+    public DataSourceType value() default DataSourceType.MASTER;
+}
diff --git a/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Excel.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java
similarity index 90%
rename from src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Excel.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java
index aabe3bc7..e0a01b82 100644
--- a/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Excel.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java
@@ -1,4 +1,4 @@
-package com.ruoyi.framework.aspectj.lang.annotation;
+package com.ruoyi.common.annotation;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
diff --git a/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Log.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java
similarity index 65%
rename from src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Log.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java
index 3dc59208..3814f44e 100644
--- a/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Log.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java
@@ -1,33 +1,40 @@
-package com.ruoyi.framework.aspectj.lang.annotation;
+package com.ruoyi.common.annotation;
 
 import java.lang.annotation.Documented;
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.aspectj.lang.enums.OperatorType;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.enums.OperatorType;
 
 /**
  * 自定义操作日志记录注解
  * 
  * @author ruoyi
- *
  */
 @Target({ ElementType.PARAMETER, ElementType.METHOD })
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
 public @interface Log
 {
-    /** 模块 */
+    /**
+     * 模块 
+     */
     String title() default "";
 
-    /** 功能 */
+    /**
+     * 功能
+     */
     BusinessType businessType() default BusinessType.OTHER;
 
-    /** 操作人类别 */
+    /**
+     * 操作人类别
+     */
     OperatorType operatorType() default OperatorType.MANAGE;
 
-    /** 是否保存请求的参数 */
+    /**
+     * 是否保存请求的参数
+     */
     boolean isSaveRequestData() default true;
 }
diff --git a/src/main/java/com/ruoyi/framework/web/domain/AjaxResult.java b/ruoyi-common/src/main/java/com/ruoyi/common/base/AjaxResult.java
similarity index 92%
rename from src/main/java/com/ruoyi/framework/web/domain/AjaxResult.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/base/AjaxResult.java
index 4fbc9fa1..208df997 100644
--- a/src/main/java/com/ruoyi/framework/web/domain/AjaxResult.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/base/AjaxResult.java
@@ -1,4 +1,4 @@
-package com.ruoyi.framework.web.domain;
+package com.ruoyi.common.base;
 
 import java.util.HashMap;
 
diff --git a/src/main/java/com/ruoyi/framework/web/domain/BaseEntity.java b/ruoyi-common/src/main/java/com/ruoyi/common/base/BaseEntity.java
similarity index 89%
rename from src/main/java/com/ruoyi/framework/web/domain/BaseEntity.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/base/BaseEntity.java
index 23984202..a3a9c4bb 100644
--- a/src/main/java/com/ruoyi/framework/web/domain/BaseEntity.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/base/BaseEntity.java
@@ -1,10 +1,10 @@
-package com.ruoyi.framework.web.domain;
+package com.ruoyi.common.base;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.Map;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.google.common.collect.Maps;
 
 /**
  * Entity基类
@@ -102,7 +102,7 @@ public class BaseEntity implements Serializable
     {
         if (params == null)
         {
-            params = Maps.newHashMap();
+            params = new HashMap<>();
         }
         return params;
     }
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/Global.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/Global.java
new file mode 100644
index 00000000..5a23bd92
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/Global.java
@@ -0,0 +1,164 @@
+package com.ruoyi.common.config;
+
+import java.io.FileNotFoundException;
+import java.util.HashMap;
+import java.util.Map;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.YamlUtil;
+
+/**
+ * 全局配置类
+ * 
+ * @author ruoyi
+ */
+public class Global
+{
+    private static final Logger log = LoggerFactory.getLogger(Global.class);
+
+    private static String NAME = "application.yml";
+
+    /**
+     * 当前对象实例
+     */
+    private static Global global = null;
+
+    /**
+     * 保存全局属性值
+     */
+    private static Map<String, String> map = new HashMap<String, String>();
+
+    private Global()
+    {
+    }
+
+    /**
+     * 静态工厂方法 获取当前对象实例 多线程安全单例模式(使用双重同步锁)
+     */
+
+    public static synchronized Global getInstance()
+    {
+        if (global == null)
+        {
+            synchronized (Global.class)
+            {
+                if (global == null)
+                    global = new Global();
+            }
+        }
+        return global;
+    }
+
+    /**
+     * 获取配置
+     */
+    public static String getConfig(String key)
+    {
+        String value = map.get(key);
+        if (value == null)
+        {
+            Map<?, ?> yamlMap = null;
+            try
+            {
+                yamlMap = YamlUtil.loadYaml(NAME);
+                value = String.valueOf(YamlUtil.getProperty(yamlMap, key));
+                map.put(key, value != null ? value : StringUtils.EMPTY);
+            }
+            catch (FileNotFoundException e)
+            {
+                log.error("获取全局配置异常 {}", key);
+            }
+        }
+        return value;
+    }
+
+    /**
+     * 获取项目名称
+     */
+    public static String getName()
+    {
+        return StringUtils.nvl(getConfig("ruoyi.name"), "RuoYi");
+    }
+
+    /**
+     * 获取项目版本
+     */
+    public static String getVersion()
+    {
+        return StringUtils.nvl(getConfig("ruoyi.version"), "3.0.0");
+    }
+
+    /**
+     * 获取版权年份
+     */
+    public static String getCopyrightYear()
+    {
+        return StringUtils.nvl(getConfig("ruoyi.copyrightYear"), "2018");
+    }
+
+    /**
+     * 获取ip地址开关
+     */
+    public static Boolean isAddressEnabled()
+    {
+        String value = getConfig("ruoyi.addressEnabled");
+        return Boolean.TRUE.equals(value);
+    }
+
+    /**
+     * 获取文件上传路径
+     */
+    public static String getProfile()
+    {
+        return getConfig("ruoyi.profile");
+    }
+
+    /**
+     * 获取头像上传路径
+     */
+    public static String getAvatarPath()
+    {
+        return getConfig("ruoyi.profile") + "avatar/";
+    }
+
+    /**
+     * 获取下载上传路径
+     */
+    public static String getDownloadPath()
+    {
+        return getConfig("ruoyi.profile") + "download/";
+    }
+
+    /**
+     * 获取作者
+     */
+    public static String getAuthor()
+    {
+        return StringUtils.nvl(getConfig("gen.author"), "ruoyi");
+    }
+
+    /**
+     * 生成包路径
+     */
+    public static String getPackageName()
+    {
+        return StringUtils.nvl(getConfig("gen.packageName"), "com.ruoyi.project.module");
+    }
+
+    /**
+     * 是否自动去除表前缀
+     */
+    public static String getAutoRemovePre()
+    {
+        return StringUtils.nvl(getConfig("gen.autoRemovePre"), "true");
+    }
+
+    /**
+     * 表前缀(类名不会包含表前缀)
+     */
+    public static String getTablePrefix()
+    {
+        return StringUtils.nvl(getConfig("gen.tablePrefix"), "sys_");
+    }
+}
diff --git a/src/main/java/com/ruoyi/common/constant/Constants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
similarity index 100%
rename from src/main/java/com/ruoyi/common/constant/Constants.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
diff --git a/src/main/java/com/ruoyi/common/constant/PermissionConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/PermissionConstants.java
similarity index 95%
rename from src/main/java/com/ruoyi/common/constant/PermissionConstants.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/constant/PermissionConstants.java
index 89672145..7caf1854 100644
--- a/src/main/java/com/ruoyi/common/constant/PermissionConstants.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/PermissionConstants.java
@@ -1,27 +1,27 @@
-package com.ruoyi.common.constant;
-
-/**
- * 权限通用常量
- * 
- * @author ruoyi
- */
-public class PermissionConstants
-{
-    /** 新增权限 */
-    public static final String ADD_PERMISSION = "add";
-
-    /** 修改权限 */
-    public static final String EDIT_PERMISSION = "edit";
-
-    /** 删除权限 */
-    public static final String REMOVE_PERMISSION = "remove";
-    
-    /** 导出权限 */
-    public static final String EXPORT_PERMISSION = "export";
-
-    /** 显示权限 */
-    public static final String VIEW_PERMISSION = "view";
-
-    /** 查询权限 */
-    public static final String LIST_PERMISSION = "list";
-}
+package com.ruoyi.common.constant;
+
+/**
+ * 权限通用常量
+ * 
+ * @author ruoyi
+ */
+public class PermissionConstants
+{
+    /** 新增权限 */
+    public static final String ADD_PERMISSION = "add";
+
+    /** 修改权限 */
+    public static final String EDIT_PERMISSION = "edit";
+
+    /** 删除权限 */
+    public static final String REMOVE_PERMISSION = "remove";
+    
+    /** 导出权限 */
+    public static final String EXPORT_PERMISSION = "export";
+
+    /** 显示权限 */
+    public static final String VIEW_PERMISSION = "view";
+
+    /** 查询权限 */
+    public static final String LIST_PERMISSION = "list";
+}
diff --git a/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java
similarity index 100%
rename from src/main/java/com/ruoyi/common/constant/ScheduleConstants.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java
diff --git a/src/main/java/com/ruoyi/common/constant/ShiroConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/ShiroConstants.java
similarity index 100%
rename from src/main/java/com/ruoyi/common/constant/ShiroConstants.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/constant/ShiroConstants.java
diff --git a/src/main/java/com/ruoyi/common/constant/UserConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java
similarity index 100%
rename from src/main/java/com/ruoyi/common/constant/UserConstants.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java
diff --git a/src/main/java/com/ruoyi/framework/aspectj/lang/enums/BusinessStatus.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessStatus.java
similarity index 75%
rename from src/main/java/com/ruoyi/framework/aspectj/lang/enums/BusinessStatus.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessStatus.java
index 2e1c7af9..43612e5d 100644
--- a/src/main/java/com/ruoyi/framework/aspectj/lang/enums/BusinessStatus.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessStatus.java
@@ -1,20 +1,19 @@
-package com.ruoyi.framework.aspectj.lang.enums;
-
-/**
- * 操作状态
- * 
- * @author ruoyi
- *
- */
-public enum BusinessStatus
-{
-    /**
-     * 成功
-     */
-    SUCCESS,
-
-    /**
-     * 失败
-     */
-    FAIL,
-}
+package com.ruoyi.common.enums;
+
+/**
+ * 操作状态
+ * 
+ * @author ruoyi
+ */
+public enum BusinessStatus
+{
+    /**
+     * 成功
+     */
+    SUCCESS,
+
+    /**
+     * 失败
+     */
+    FAIL,
+}
diff --git a/src/main/java/com/ruoyi/framework/aspectj/lang/enums/BusinessType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java
similarity index 82%
rename from src/main/java/com/ruoyi/framework/aspectj/lang/enums/BusinessType.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java
index e140d614..d22bccbd 100644
--- a/src/main/java/com/ruoyi/framework/aspectj/lang/enums/BusinessType.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java
@@ -1,60 +1,59 @@
-package com.ruoyi.framework.aspectj.lang.enums;
-
-/**
- * 业务操作类型
- * 
- * @author ruoyi
- *
- */
-public enum BusinessType
-{
-    /**
-     * 其它
-     */
-    OTHER,
-
-    /**
-     * 新增
-     */
-    INSERT,
-
-    /**
-     * 修改
-     */
-    UPDATE,
-
-    /**
-     * 删除
-     */
-    DELETE,
-
-    /**
-     * 授权
-     */
-    GRANT,
-
-    /**
-     * 导出
-     */
-    EXPORT,
-
-    /**
-     * 导入
-     */
-    IMPORT,
-
-    /**
-     * 强退
-     */
-    FORCE,
-
-    /**
-     * 生成代码
-     */
-    GENCODE,
-    
-    /**
-     * 清空数据
-     */
-    CLEAN,
-}
+package com.ruoyi.common.enums;
+
+/**
+ * 业务操作类型
+ * 
+ * @author ruoyi
+ */
+public enum BusinessType
+{
+    /**
+     * 其它
+     */
+    OTHER,
+
+    /**
+     * 新增
+     */
+    INSERT,
+
+    /**
+     * 修改
+     */
+    UPDATE,
+
+    /**
+     * 删除
+     */
+    DELETE,
+
+    /**
+     * 授权
+     */
+    GRANT,
+
+    /**
+     * 导出
+     */
+    EXPORT,
+
+    /**
+     * 导入
+     */
+    IMPORT,
+
+    /**
+     * 强退
+     */
+    FORCE,
+
+    /**
+     * 生成代码
+     */
+    GENCODE,
+    
+    /**
+     * 清空
+     */
+    CLEAN,
+}
diff --git a/src/main/java/com/ruoyi/framework/aspectj/lang/enums/DataSourceType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java
similarity index 75%
rename from src/main/java/com/ruoyi/framework/aspectj/lang/enums/DataSourceType.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java
index 103cd806..4b5341d1 100644
--- a/src/main/java/com/ruoyi/framework/aspectj/lang/enums/DataSourceType.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java
@@ -1,19 +1,19 @@
-package com.ruoyi.framework.aspectj.lang.enums;
-
-/**
- * 数据源
- * 
- * @author ruoyi
- */
-public enum DataSourceType
-{
-    /**
-     * 主库
-     */
-    MASTER,
-
-    /**
-     * 从库
-     */
-    SLAVE
-}
+package com.ruoyi.common.enums;
+
+/**
+ * 数据源
+ * 
+ * @author ruoyi
+ */
+public enum DataSourceType
+{
+    /**
+     * 主库
+     */
+    MASTER,
+
+    /**
+     * 从库
+     */
+    SLAVE
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/OnlineStatus.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/OnlineStatus.java
new file mode 100644
index 00000000..b0bdd100
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/OnlineStatus.java
@@ -0,0 +1,24 @@
+package com.ruoyi.common.enums;
+
+/**
+ * 用户会话
+ * 
+ * @author ruoyi
+ */
+public enum OnlineStatus
+{
+    /** 用户状态 */
+    on_line("在线"), off_line("离线");
+
+    private final String info;
+
+    private OnlineStatus(String info)
+    {
+        this.info = info;
+    }
+
+    public String getInfo()
+    {
+        return info;
+    }
+}
diff --git a/src/main/java/com/ruoyi/framework/aspectj/lang/enums/OperatorType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/OperatorType.java
similarity index 79%
rename from src/main/java/com/ruoyi/framework/aspectj/lang/enums/OperatorType.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/enums/OperatorType.java
index a325d688..66a44d6a 100644
--- a/src/main/java/com/ruoyi/framework/aspectj/lang/enums/OperatorType.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/OperatorType.java
@@ -1,26 +1,25 @@
-package com.ruoyi.framework.aspectj.lang.enums;
-
-/**
- * 操作人类别
- * 
- * @author ruoyi
- *
- */
-public enum OperatorType
-{
-    /**
-     * 其它
-     */
-    OTHER,
-
-    /**
-     * 后台用户
-     */
-
-    MANAGE,
-
-    /**
-     * 手机端用户
-     */
-    MOBILE
-}
+package com.ruoyi.common.enums;
+
+/**
+ * 操作人类别
+ * 
+ * @author ruoyi
+ */
+public enum OperatorType
+{
+    /**
+     * 其它
+     */
+    OTHER,
+
+    /**
+     * 后台用户
+     */
+
+    MANAGE,
+
+    /**
+     * 手机端用户
+     */
+    MOBILE
+}
diff --git a/src/main/java/com/ruoyi/project/system/user/domain/UserStatus.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserStatus.java
similarity index 84%
rename from src/main/java/com/ruoyi/project/system/user/domain/UserStatus.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/enums/UserStatus.java
index 8164221d..a4613ff9 100644
--- a/src/main/java/com/ruoyi/project/system/user/domain/UserStatus.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserStatus.java
@@ -1,10 +1,9 @@
-package com.ruoyi.project.system.user.domain;
+package com.ruoyi.common.enums;
 
 /**
  * 用户状态
  * 
  * @author ruoyi
- *
  */
 public enum UserStatus
 {
diff --git a/src/main/java/com/ruoyi/common/exception/DemoModeException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/DemoModeException.java
similarity index 100%
rename from src/main/java/com/ruoyi/common/exception/DemoModeException.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/exception/DemoModeException.java
diff --git a/src/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java
similarity index 100%
rename from src/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java
diff --git a/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java
similarity index 100%
rename from src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java
diff --git a/src/main/java/com/ruoyi/common/exception/job/TaskException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java
similarity index 94%
rename from src/main/java/com/ruoyi/common/exception/job/TaskException.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java
index a567b408..14b2361d 100644
--- a/src/main/java/com/ruoyi/common/exception/job/TaskException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java
@@ -1,34 +1,34 @@
-package com.ruoyi.common.exception.job;
-
-/**
- * 计划策略异常
- * 
- * @author ruoyi
- */
-public class TaskException extends Exception
-{
-    private static final long serialVersionUID = 1L;
-
-    private Code code;
-
-    public TaskException(String msg, Code code)
-    {
-        this(msg, code, null);
-    }
-
-    public TaskException(String msg, Code code, Exception nestedEx)
-    {
-        super(msg, nestedEx);
-        this.code = code;
-    }
-
-    public Code getCode()
-    {
-        return code;
-    }
-
-    public enum Code
-    {
-        TASK_EXISTS, NO_TASK_EXISTS, TASK_ALREADY_STARTED, UNKNOWN, CONFIG_ERROR, TASK_NODE_NOT_AVAILABLE
-    }
+package com.ruoyi.common.exception.job;
+
+/**
+ * 计划策略异常
+ * 
+ * @author ruoyi
+ */
+public class TaskException extends Exception
+{
+    private static final long serialVersionUID = 1L;
+
+    private Code code;
+
+    public TaskException(String msg, Code code)
+    {
+        this(msg, code, null);
+    }
+
+    public TaskException(String msg, Code code, Exception nestedEx)
+    {
+        super(msg, nestedEx);
+        this.code = code;
+    }
+
+    public Code getCode()
+    {
+        return code;
+    }
+
+    public enum Code
+    {
+        TASK_EXISTS, NO_TASK_EXISTS, TASK_ALREADY_STARTED, UNKNOWN, CONFIG_ERROR, TASK_NODE_NOT_AVAILABLE
+    }
 }
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/json/JSON.java b/ruoyi-common/src/main/java/com/ruoyi/common/json/JSON.java
new file mode 100644
index 00000000..119147b6
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/json/JSON.java
@@ -0,0 +1,187 @@
+package com.ruoyi.common.json;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import com.fasterxml.jackson.core.JsonGenerationException;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+
+/**
+ * JSON解析处理
+ * 
+ * @author ruoyi
+ */
+public class JSON
+{
+    public static final String DEFAULT_FAIL = "\"Parse failed\"";
+    private static final ObjectMapper objectMapper = new ObjectMapper();
+    private static final ObjectWriter objectWriter = objectMapper.writerWithDefaultPrettyPrinter();
+
+    public static void marshal(File file, Object value) throws Exception
+    {
+        try
+        {
+            objectWriter.writeValue(file, value);
+        }
+        catch (JsonGenerationException e)
+        {
+            throw new Exception(e);
+        }
+        catch (JsonMappingException e)
+        {
+            throw new Exception(e);
+        }
+        catch (IOException e)
+        {
+            throw new Exception(e);
+        }
+    }
+
+    public static void marshal(OutputStream os, Object value) throws Exception
+    {
+        try
+        {
+            objectWriter.writeValue(os, value);
+        }
+        catch (JsonGenerationException e)
+        {
+            throw new Exception(e);
+        }
+        catch (JsonMappingException e)
+        {
+            throw new Exception(e);
+        }
+        catch (IOException e)
+        {
+            throw new Exception(e);
+        }
+    }
+
+    public static String marshal(Object value) throws Exception
+    {
+        try
+        {
+            return objectWriter.writeValueAsString(value);
+        }
+        catch (JsonGenerationException e)
+        {
+            throw new Exception(e);
+        }
+        catch (JsonMappingException e)
+        {
+            throw new Exception(e);
+        }
+        catch (IOException e)
+        {
+            throw new Exception(e);
+        }
+    }
+
+    public static byte[] marshalBytes(Object value) throws Exception
+    {
+        try
+        {
+            return objectWriter.writeValueAsBytes(value);
+        }
+        catch (JsonGenerationException e)
+        {
+            throw new Exception(e);
+        }
+        catch (JsonMappingException e)
+        {
+            throw new Exception(e);
+        }
+        catch (IOException e)
+        {
+            throw new Exception(e);
+        }
+    }
+
+    public static <T> T unmarshal(File file, Class<T> valueType) throws Exception
+    {
+        try
+        {
+            return objectMapper.readValue(file, valueType);
+        }
+        catch (JsonParseException e)
+        {
+            throw new Exception(e);
+        }
+        catch (JsonMappingException e)
+        {
+            throw new Exception(e);
+        }
+        catch (IOException e)
+        {
+            throw new Exception(e);
+        }
+    }
+
+    public static <T> T unmarshal(InputStream is, Class<T> valueType) throws Exception
+    {
+        try
+        {
+            return objectMapper.readValue(is, valueType);
+        }
+        catch (JsonParseException e)
+        {
+            throw new Exception(e);
+        }
+        catch (JsonMappingException e)
+        {
+            throw new Exception(e);
+        }
+        catch (IOException e)
+        {
+            throw new Exception(e);
+        }
+    }
+
+    public static <T> T unmarshal(String str, Class<T> valueType) throws Exception
+    {
+        try
+        {
+            return objectMapper.readValue(str, valueType);
+        }
+        catch (JsonParseException e)
+        {
+            throw new Exception(e);
+        }
+        catch (JsonMappingException e)
+        {
+            throw new Exception(e);
+        }
+        catch (IOException e)
+        {
+            throw new Exception(e);
+        }
+    }
+
+    public static <T> T unmarshal(byte[] bytes, Class<T> valueType) throws Exception
+    {
+        try
+        {
+            if (bytes == null)
+            {
+                bytes = new byte[0];
+            }
+            return objectMapper.readValue(bytes, 0, bytes.length, valueType);
+        }
+        catch (JsonParseException e)
+        {
+            throw new Exception(e);
+        }
+        catch (JsonMappingException e)
+        {
+            throw new Exception(e);
+        }
+        catch (IOException e)
+        {
+            throw new Exception(e);
+        }
+    }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/json/JSONObject.java b/ruoyi-common/src/main/java/com/ruoyi/common/json/JSONObject.java
new file mode 100644
index 00000000..e4c27a4d
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/json/JSONObject.java
@@ -0,0 +1,746 @@
+package com.ruoyi.common.json;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * 通用消息对象,基于Map实现的可嵌套数据结构。 支持JSON数据结构。
+ * 
+ * @author ruoyi
+ */
+public class JSONObject extends LinkedHashMap<String, Object>
+{
+    private static final long serialVersionUID = 1L;
+    private static final Pattern arrayNamePattern = Pattern.compile("(\\w+)((\\[\\d+\\])+)");
+    private static final ObjectMapper objectMapper = new ObjectMapper();
+
+    /**
+     * 数组结构。
+     */
+    public static class JSONArray extends ArrayList<Object>
+    {
+        private static final long serialVersionUID = 1L;
+
+        public JSONArray()
+        {
+            super();
+        }
+
+        public JSONArray(int size)
+        {
+            super(size);
+        }
+
+        @Override
+        public String toString()
+        {
+            try
+            {
+                return JSON.marshal(this);
+            }
+            catch (Exception e)
+            {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public Object set(int index, Object element)
+        {
+            return super.set(index, transfer(element));
+        }
+
+        @Override
+        public boolean add(Object element)
+        {
+            return super.add(transfer(element));
+        }
+
+        @Override
+        public void add(int index, Object element)
+        {
+            super.add(index, transfer(element));
+        }
+    }
+
+    public JSONObject()
+    {
+        super();
+    }
+
+    public JSONObject(final JSONObject other)
+    {
+        super(other);
+    }
+
+    @Override
+    public String toString()
+    {
+        try
+        {
+            return JSON.marshal(this);
+        }
+        catch (Exception e)
+        {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 转换为紧凑格式的字符串。
+     * 
+     * @return 返回本对象紧凑格式字符串。
+     */
+    public String toCompactString()
+    {
+        try
+        {
+            return objectMapper.writeValueAsString(this);
+        }
+        catch (Exception e)
+        {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 获取指定字段的整数值。如果字段不存在,或者无法转换为整数,返回null。
+     * 
+     * @param name 字段名,支持多级。
+     * @return 返回指定的整数值,或者null。
+     */
+    public Integer intValue(final String name)
+    {
+        return valueAsInt(value(name));
+    }
+
+    /**
+     * 获取指定字段的整数值。如果字段不存在,或者无法转换为整数,返回defaultValue。
+     * 
+     * @param name 字段名,支持多级。
+     * @param defaultValue 查询失败时,返回的值。
+     * @return 返回指定的整数值,或者defaultValue。
+     */
+    public Integer intValue(final String name, final Integer defaultValue)
+    {
+        return StringUtils.nvl(intValue(name), defaultValue);
+    }
+
+    /**
+     * 获取指定字段的长整数值。如果字段不存在,或者无法转换为长整数,返回null。
+     * 
+     * @param name 字段名,支持多级。
+     * @return 返回指定的长整数值,或者null。
+     */
+    public Long longValue(final String name)
+    {
+        return valueAsLong(value(name));
+    }
+
+    /**
+     * 获取指定字段的长整数值。如果字段不存在,或者无法转换为长整数,返回defaultValue。
+     * 
+     * @param name 字段名,支持多级。
+     * @param defaultValue 查询失败时,返回的值。
+     * @return 返回指定的长整数值,或者defaultValue。
+     */
+    public Long longValue(final String name, final Long defaultValue)
+    {
+        return StringUtils.nvl(longValue(name), defaultValue);
+    }
+
+    /**
+     * 获取指定字段的布尔值。如果字段不存在,或者无法转换为布尔型,返回null。
+     * 
+     * @param name 字段名,支持多级。
+     * @return 返回指定的布尔值,或者null。
+     */
+    public Boolean boolValue(final String name)
+    {
+        return valueAsBool(value(name));
+    }
+
+    /**
+     * 获取指定字段的布尔值。如果字段不存在,或者无法转换为布尔型,返回defaultValue。
+     * 
+     * @param name 字段名,支持多级。
+     * @param defaultValue 查询失败时,返回的值。
+     * @return 返回指定的布尔值,或者defaultValue。
+     */
+    public Boolean boolValue(final String name, final Boolean defaultValue)
+    {
+        return StringUtils.nvl(boolValue(name), defaultValue);
+    }
+
+    /**
+     * 获取指定字段的字符串值。如果字段不存在,返回null。
+     * 
+     * @param name 字段名,支持多级。
+     * @return 返回指定的字符串值,或者null。
+     */
+    public String strValue(final String name)
+    {
+        return valueAsStr(value(name));
+    }
+
+    /**
+     * 获取指定字段的字符串值。如果字段不存在,返回defaultValue。
+     * 
+     * @param name 字段名,支持多级。
+     * @param defaultValue 查询失败时,返回的值。
+     * @return 返回指定的字符串值,或者defaultValue。
+     */
+    public String strValue(final String name, final String defaultValue)
+    {
+        return StringUtils.nvl(strValue(name), defaultValue);
+    }
+
+    /**
+     * 获取指定字段的值。
+     * 
+     * @param name 字段名,支持多级,支持数组下标。
+     * @return 返回指定字段的值。
+     */
+    public Object value(final String name)
+    {
+        final int indexDot = name.indexOf('.');
+        if (indexDot >= 0)
+        {
+            return obj(name.substring(0, indexDot)).value(name.substring(indexDot + 1));
+        }
+        else
+        {
+            final Matcher matcher = arrayNamePattern.matcher(name);
+            if (matcher.find())
+            {
+                return endArray(matcher.group(1), matcher.group(2), new EndArrayCallback<Object>()
+                {
+                    public Object callback(JSONArray arr, int index)
+                    {
+                        return elementAt(arr, index);
+                    }
+                });
+            }
+            else
+            {
+                return get(name);
+            }
+        }
+    }
+
+    /**
+     * 设置指定字段的值。
+     * 
+     * @param name 字段名,支持多级,支持数组下标。
+     * @param value 字段值。
+     * @return 返回本对象。
+     */
+    public JSONObject value(final String name, final Object value)
+    {
+        final int indexDot = name.indexOf('.');
+        if (indexDot >= 0)
+        {
+            obj(name.substring(0, indexDot)).value(name.substring(indexDot + 1), value);
+        }
+        else
+        {
+            final Matcher matcher = arrayNamePattern.matcher(name);
+            if (matcher.find())
+            {
+                endArray(matcher.group(1), matcher.group(2), new EndArrayCallback<Void>()
+                {
+                    public Void callback(JSONArray arr, int index)
+                    {
+                        elementAt(arr, index, value);
+                        return null;
+                    }
+                });
+            }
+            else
+            {
+                set(name, value);
+            }
+        }
+        return this;
+    }
+
+    /**
+     * 获取对象(非标量类型)字段。返回的数据是一个结构体。当不存在指定对象时,则为指定的名字创建一个空的MessageObject对象。
+     * 
+     * @param name 字段名。不支持多级名字,支持数组下标。
+     * @return 返回指定的对象。如果对象不存在,则为指定的名字创建一个空的MessageObject对象。
+     */
+    public JSONObject obj(final String name)
+    {
+        final Matcher matcher = arrayNamePattern.matcher(name);
+        if (matcher.find())
+        {
+            return endArray(matcher.group(1), matcher.group(2), new EndArrayCallback<JSONObject>()
+            {
+                public JSONObject callback(JSONArray arr, int index)
+                {
+                    return objAt(arr, index);
+                }
+            });
+        }
+        else
+        {
+            JSONObject obj = getObj(name);
+            if (obj == null)
+            {
+                obj = new JSONObject();
+                put(name, obj);
+            }
+            return obj;
+        }
+    }
+
+    /**
+     * 获取数组字段。将名字对应的对象以数组对象返回,当指定的字段不存在时,创建一个空的数组。
+     * 
+     * @param name 字段名。不支持多级名字,不支持下标。
+     * @return 返回一个数组(List)。
+     */
+    public JSONArray arr(final String name)
+    {
+        JSONArray arr = getArr(name);
+        if (arr == null)
+        {
+            arr = new JSONArray();
+            put(name, arr);
+        }
+        return arr;
+    }
+
+    /**
+     * 获取对象(非标量类型)字段。返回的数据是一个结构体。
+     * 
+     * @param name 字段名。
+     * @return 返回指定的对象字段。
+     */
+    public JSONObject getObj(final String name)
+    {
+        return (JSONObject) get(name);
+    }
+
+    /**
+     * 获取数组类型字段。
+     * 
+     * @param name 字段名。
+     * @return 返回数组类型字段。
+     */
+    public JSONArray getArr(final String name)
+    {
+        return (JSONArray) get(name);
+    }
+
+    /**
+     * 返回字段整数值。如果不存在,返回null。
+     * 
+     * @param name 字段名。
+     * @return 返回指定字段整数值。
+     */
+    public Integer getInt(final String name)
+    {
+        return valueAsInt(get(name));
+    }
+
+    /**
+     * 返回字段整数值。如果不存在,返回defaultValue。
+     * 
+     * @param name 字段名。
+     * @param defaultValue 字段不存在时,返回的值。
+     * @return 返回指定字段整数值。
+     */
+    public Integer getInt(final String name, Integer defaultValue)
+    {
+        return StringUtils.nvl(getInt(name), defaultValue);
+    }
+
+    /**
+     * 返回字段长整数值。如果不存在,返回null。
+     * 
+     * @param name 字段名。
+     * @return 返回指定字段长整数值。
+     */
+    public Long getLong(final String name)
+    {
+        return valueAsLong(get(name));
+    }
+
+    /**
+     * 返回字段长整数值。如果不存在,返回defaultValue。
+     * 
+     * @param name 字段名。
+     * @param defaultValue 字段不存在时,返回的值。
+     * @return 返回指定字段长整数值。
+     */
+    public Long getLong(final String name, Long defaultValue)
+    {
+        return StringUtils.nvl(getLong(name), defaultValue);
+    }
+
+    /**
+     * 返回字段字符串值。如果不存在,返回null。
+     * 
+     * @param name 字段名。
+     * @return 返回指定字段字符串值。
+     */
+    public String getStr(final String name)
+    {
+        return valueAsStr(get(name));
+    }
+
+    /**
+     * 返回字段字符串值。如果不存在,返回defaultValue。
+     * 
+     * @param name 字段名。
+     * @param defaultValue 字段不存在时,返回的值。
+     * @return 返回指定字段字符串值。
+     */
+    public String getStr(final String name, final String defaultValue)
+    {
+        return StringUtils.nvl(getStr(name), defaultValue);
+    }
+
+    /**
+     * 字段值按照布尔类型返回。如果不存在,返回null。
+     * 
+     * @param name 字段名。
+     * @return 字段值。
+     */
+    public Boolean getBool(final String name)
+    {
+        return valueAsBool(get(name));
+    }
+
+    /**
+     * 字段值按照布尔类型返回。如果不存在,返回defaultValue。
+     * 
+     * @param name 字段名。
+     * @param defaultValue 字段不存在时,返回的值。
+     * @return 字段值。
+     */
+    public Boolean getBool(final String name, final Boolean defaultValue)
+    {
+        return StringUtils.nvl(getBool(name), defaultValue);
+    }
+
+    /**
+     * 设置字段值
+     * 
+     * @param name 字段名
+     * @param value 字段值(标量:数字、字符串、布尔型;结构体:MessageObject)。 如果是Map类型同时非MessageObject类型,则自动转换为MessageObject类型再存入
+     *            (此时,再修改Map中的数据,将不会体现到本对象中)。
+     * @return 返回本对象
+     */
+    public JSONObject set(final String name, final Object value)
+    {
+        put(name, value);
+        return this;
+    }
+
+    /**
+     * 将本对象转换为Java Bean。
+     * 
+     * @param beanClass Java Bean的类对象。
+     * @return 返回转换后的Java Bean。
+     */
+    public <T> T asBean(Class<T> beanClass)
+    {
+        try
+        {
+            return JSON.unmarshal(JSON.marshal(this), beanClass);
+        }
+        catch (Exception e)
+        {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 重载基类的方法。如果 value 是 Map 类型,但不是 MessageObject 类型,则创建一个包含内容等同于原 Map 的 MessageObject 作为 value(注意:此后再更改 Map 的内容,将不会反映到
+     * MessageObject 中)。 重载此方法的目的是为了使JSON能够正确地解析为MessageObject对象。不建议直接调用此方法,请使用 set(name, value)方法设置字段值。
+     */
+    @Override
+    public Object put(String key, Object value)
+    {
+        return super.put(key, transfer(value));
+    }
+
+    public static Integer valueAsInt(Object value)
+    {
+        if (value instanceof Integer)
+        {
+            return (Integer) value;
+        }
+        else if (value instanceof Number)
+        {
+            return ((Number) value).intValue();
+        }
+        else if (value instanceof String)
+        {
+            return Integer.valueOf((String) value);
+        }
+        else if (value instanceof Boolean)
+        {
+            return ((Boolean) value) ? 1 : 0;
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+    public static Long valueAsLong(Object value)
+    {
+        if (value instanceof Long)
+        {
+            return (Long) value;
+        }
+        else if (value instanceof Number)
+        {
+            return ((Number) value).longValue();
+        }
+        else if (value instanceof String)
+        {
+            return Long.valueOf((String) value);
+        }
+        else if (value instanceof Boolean)
+        {
+            return ((Boolean) value) ? 1L : 0L;
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+    public static String valueAsStr(Object value)
+    {
+        if (value instanceof String)
+        {
+            return (String) value;
+        }
+        else if (value != null)
+        {
+            return value.toString();
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+    public static Boolean valueAsBool(Object value)
+    {
+        if (value instanceof Boolean)
+        {
+            return (Boolean) value;
+        }
+        else if (value instanceof Number)
+        {
+            return ((Number) value).doubleValue() != 0.0;
+        }
+        else if (value instanceof String)
+        {
+            return Boolean.valueOf((String) value);
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+    /**
+     * 将所有层次中凡是Map类型同时又不是MessageObject的类型,转换为MessageObject类型。
+     * 
+     * @param value 值。
+     * @return 返回转换后的值。
+     */
+    @SuppressWarnings("unchecked")
+    private static Object transfer(final Object value)
+    {
+        if (!(value instanceof JSONObject) && value instanceof Map)
+        {
+            return toObj((Map<String, Object>) value);
+        }
+        else if (!(value instanceof JSONArray) && value instanceof Collection)
+        {
+            return toArr((Collection<Object>) value);
+        }
+        else
+        {
+            return value;
+        }
+    }
+
+    private static JSONArray toArr(final Collection<Object> list)
+    {
+        final JSONArray arr = new JSONArray(list.size());
+        for (final Object element : list)
+        {
+            arr.add(element);
+        }
+        return arr;
+    }
+
+    private static JSONObject toObj(final Map<String, Object> map)
+    {
+        final JSONObject obj = new JSONObject();
+        for (final Map.Entry<String, Object> ent : map.entrySet())
+        {
+            obj.put(ent.getKey(), transfer(ent.getValue()));
+        }
+        return obj;
+    }
+
+    /**
+     * 将指定下标元素作为数组返回,如果不存在,则在该位置创建一个空的数组。
+     * 
+     * @param arr 当前数组。
+     * @param index 下标。
+     * @return 返回当前数组指定下标的元素,该元素应该是一个数组。
+     */
+    private static JSONArray arrayAt(JSONArray arr, int index)
+    {
+        expand(arr, index);
+        if (arr.get(index) == null)
+        {
+            arr.set(index, new JSONArray());
+        }
+        return (JSONArray) arr.get(index);
+    }
+
+    /**
+     * 将指定下标元素作为结构体返回,如果不存在,则在该位置创建一个空的结构体。
+     * 
+     * @param arr 当前数组。
+     * @param index 下标。
+     * @return 返回当前数组指定下标元素,该元素是一个结构体。
+     */
+    private static JSONObject objAt(final JSONArray arr, int index)
+    {
+        expand(arr, index);
+        if (arr.get(index) == null)
+        {
+            arr.set(index, new JSONObject());
+        }
+        return (JSONObject) arr.get(index);
+    }
+
+    /**
+     * 设置数组指定下标位置的值。
+     * 
+     * @param arr 数组。
+     * @param index 下标。
+     * @param value 值。
+     */
+    private static void elementAt(final JSONArray arr, final int index, final Object value)
+    {
+        expand(arr, index).set(index, value);
+    }
+
+    /**
+     * 获取数组指定下标元素的值。
+     * 
+     * @param arr 数组。
+     * @param index 下标。
+     * @return 值。
+     */
+    private static Object elementAt(final JSONArray arr, final int index)
+    {
+        return expand(arr, index).get(index);
+    }
+
+    /**
+     * 扩展数组到指定下标,以防止访问时下标越界。
+     * 
+     * @param arr 数组
+     * @param index 下标
+     * @return 返回传入的数组
+     */
+    private static JSONArray expand(final JSONArray arr, final int index)
+    {
+        while (arr.size() <= index)
+        {
+            arr.add(null);
+        }
+        return arr;
+    }
+
+    /**
+     * 最后数组回调。
+     * 
+     * @author Mike
+     *
+     * @param <T> 回调返回数据类型。
+     */
+    private interface EndArrayCallback<T>
+    {
+        /**
+         * 当定位到最后一级数组,将调用本方法。
+         * 
+         * @param arr 最后一级数组对象。
+         * @param index 最后一级索引。
+         * @return 返回回调的返回值。
+         */
+        T callback(JSONArray arr, int index);
+    }
+
+    /**
+     * 处理多维数组的工具函数(包括一维数组)。多维数组的名字如:arrary[1][2][3], 则name=array,indexStr=[1][2][3],在callback中,endArr将是
+     * array[1][2]指定的对象,indexe=3。
+     * 
+     * @param name 不带下标的名字,不支持多级名字。
+     * @param indexesStr 索引部分的字符串,如:[1][2][3]
+     * @param callback 回调函数。
+     * @return 返回回调函数的返回值。
+     */
+    private <T> T endArray(final String name, final String indexesStr, final EndArrayCallback<T> callback)
+    {
+        JSONArray endArr = arr(name);
+        final int[] indexes = parseIndexes(indexesStr);
+        int i = 0;
+        while (i < indexes.length - 1)
+        {
+            endArr = arrayAt(endArr, indexes[i++]);
+        }
+        return callback.callback(endArr, indexes[i]);
+    }
+
+    private static int[] parseIndexes(final String s)
+    {
+        int[] indexes = null;
+        List<Integer> list = new ArrayList<Integer>();
+
+        final StringTokenizer st = new StringTokenizer(s, "[]");
+        while (st.hasMoreTokens())
+        {
+            final int index = Integer.valueOf(st.nextToken());
+            if (index < 0)
+            {
+                throw new RuntimeException(String.format("Illegal index %1$d in \"%2$s\"", index, s));
+            }
+
+            list.add(index);
+        }
+
+        indexes = new int[list.size()];
+        int i = 0;
+        for (Integer tmp : list.toArray(new Integer[list.size()]))
+        {
+            indexes[i++] = tmp;
+        }
+
+        return indexes;
+    }
+}
diff --git a/src/main/java/com/ruoyi/common/support/CharsetKit.java b/ruoyi-common/src/main/java/com/ruoyi/common/support/CharsetKit.java
similarity index 96%
rename from src/main/java/com/ruoyi/common/support/CharsetKit.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/support/CharsetKit.java
index 26296ef3..eb980e1c 100644
--- a/src/main/java/com/ruoyi/common/support/CharsetKit.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/support/CharsetKit.java
@@ -8,7 +8,6 @@ import com.ruoyi.common.utils.StringUtils;
  * 字符集工具类
  * 
  * @author ruoyi
- *
  */
 public class CharsetKit
 {
diff --git a/src/main/java/com/ruoyi/common/support/Convert.java b/ruoyi-common/src/main/java/com/ruoyi/common/support/Convert.java
similarity index 96%
rename from src/main/java/com/ruoyi/common/support/Convert.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/support/Convert.java
index 433beb7c..df998c6e 100644
--- a/src/main/java/com/ruoyi/common/support/Convert.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/support/Convert.java
@@ -12,7 +12,6 @@ import com.ruoyi.common.utils.StringUtils;
  * 类型转换器
  * 
  * @author ruoyi
- * 
  */
 public class Convert
 {
@@ -995,7 +994,6 @@ public class Convert
             }
             s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s;
         }
-        return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$",
-                "零元整");
+        return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整");
     }
 }
diff --git a/src/main/java/com/ruoyi/common/support/StrFormatter.java b/ruoyi-common/src/main/java/com/ruoyi/common/support/StrFormatter.java
similarity index 95%
rename from src/main/java/com/ruoyi/common/support/StrFormatter.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/support/StrFormatter.java
index 427e01b6..0c031b7c 100644
--- a/src/main/java/com/ruoyi/common/support/StrFormatter.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/support/StrFormatter.java
@@ -84,7 +84,6 @@ public class StrFormatter
                 }
             }
         }
-        // append the characters following the last {} pair.
         // 加入最后一个占位符后所有的字符
         sbuf.append(strPattern, handledPosition, strPattern.length());
 
diff --git a/src/main/java/com/ruoyi/common/utils/AddressUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/AddressUtils.java
similarity index 53%
rename from src/main/java/com/ruoyi/common/utils/AddressUtils.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/utils/AddressUtils.java
index 5179f97b..1cbdb143 100644
--- a/src/main/java/com/ruoyi/common/utils/AddressUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/AddressUtils.java
@@ -1,10 +1,11 @@
 package com.ruoyi.common.utils;
 
-import com.alibaba.fastjson.JSONObject;
-import com.ruoyi.common.utils.http.HttpUtils;
-import com.ruoyi.framework.config.RuoYiConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import com.ruoyi.common.config.Global;
+import com.ruoyi.common.json.JSON;
+import com.ruoyi.common.json.JSONObject;
+import com.ruoyi.common.utils.http.HttpUtils;
 
 /**
  * 获取地址类
@@ -20,7 +21,7 @@ public class AddressUtils
     public static String getRealAddressByIP(String ip)
     {
         String address = "XX XX";
-        if (RuoYiConfig.isAddressEnabled())
+        if (Global.isAddressEnabled())
         {
             String rspStr = HttpUtils.sendPost(IP_URL, "ip=" + ip);
             if (StringUtils.isEmpty(rspStr))
@@ -28,11 +29,19 @@ public class AddressUtils
                 log.error("获取地理位置异常 {}", ip);
                 return address;
             }
-            JSONObject obj = JSONObject.parseObject(rspStr);
-            JSONObject data = obj.getObject("data", JSONObject.class);
-            String region = data.getString("region");
-            String city = data.getString("city");
-            address = region + " " + city;
+            JSONObject obj;
+            try
+            {
+                obj = JSON.unmarshal(rspStr, JSONObject.class);
+                JSONObject data = obj.getObj("data");
+                String region = data.getStr("region");
+                String city = data.getStr("city");
+                address = region + " " + city;
+            }
+            catch (Exception e)
+            {
+                log.error("获取地理位置异常 {}", ip);
+            }
         }
         return address;
     }
diff --git a/src/main/java/com/ruoyi/common/utils/DateUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
similarity index 100%
rename from src/main/java/com/ruoyi/common/utils/DateUtils.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
diff --git a/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExcelUtil.java
similarity index 96%
rename from src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/utils/ExcelUtil.java
index b862fd77..dc6812fb 100644
--- a/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExcelUtil.java
@@ -1,4 +1,4 @@
-package com.ruoyi.common.utils.poi;
+package com.ruoyi.common.utils;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -34,10 +34,10 @@ import org.apache.poi.ss.usermodel.WorkbookFactory;
 import org.apache.poi.ss.util.CellRangeAddressList;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.base.AjaxResult;
+import com.ruoyi.common.config.Global;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import com.ruoyi.framework.config.RuoYiConfig;
-import com.ruoyi.framework.web.domain.AjaxResult;
 
 /**
  * Excel相关处理
@@ -472,7 +472,7 @@ public class ExcelUtil<T>
      */
     public String getAbsoluteFile(String filename)
     {
-        String downloadPath = RuoYiConfig.getDownloadPath() + filename;
+        String downloadPath = Global.getDownloadPath() + filename;
         File desc = new File(downloadPath);
         if (!desc.getParentFile().exists())
         {
diff --git a/src/main/java/com/ruoyi/common/utils/IpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/IpUtils.java
similarity index 100%
rename from src/main/java/com/ruoyi/common/utils/IpUtils.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/utils/IpUtils.java
diff --git a/src/main/java/com/ruoyi/common/utils/MapDataUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MapDataUtil.java
similarity index 100%
rename from src/main/java/com/ruoyi/common/utils/MapDataUtil.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/utils/MapDataUtil.java
diff --git a/src/main/java/com/ruoyi/common/utils/Md5Utils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Md5Utils.java
similarity index 95%
rename from src/main/java/com/ruoyi/common/utils/Md5Utils.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/utils/Md5Utils.java
index aecbf17f..d709ab17 100644
--- a/src/main/java/com/ruoyi/common/utils/Md5Utils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Md5Utils.java
@@ -1,66 +1,66 @@
-package com.ruoyi.common.utils;
-
-import java.security.MessageDigest;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Md5加密方法
- * 
- * @author ruoyi
- */
-public class Md5Utils
-{
-    private static final Logger log = LoggerFactory.getLogger(Md5Utils.class);
-
-    private static byte[] md5(String s)
-    {
-        MessageDigest algorithm;
-        try
-        {
-            algorithm = MessageDigest.getInstance("MD5");
-            algorithm.reset();
-            algorithm.update(s.getBytes("UTF-8"));
-            byte[] messageDigest = algorithm.digest();
-            return messageDigest;
-        }
-        catch (Exception e)
-        {
-            log.error("MD5 Error...", e);
-        }
-        return null;
-    }
-
-    private static final String toHex(byte hash[])
-    {
-        if (hash == null)
-        {
-            return null;
-        }
-        StringBuffer buf = new StringBuffer(hash.length * 2);
-        int i;
-
-        for (i = 0; i < hash.length; i++)
-        {
-            if ((hash[i] & 0xff) < 0x10)
-            {
-                buf.append("0");
-            }
-            buf.append(Long.toString(hash[i] & 0xff, 16));
-        }
-        return buf.toString();
-    }
-
-    public static String hash(String s)
-    {
-        try
-        {
-            return new String(toHex(md5(s)).getBytes("UTF-8"), "UTF-8");
-        }
-        catch (Exception e)
-        {
-            log.error("not supported charset...{}", e);
-            return s;
-        }
-    }
-}
+package com.ruoyi.common.utils;
+
+import java.security.MessageDigest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Md5加密方法
+ * 
+ * @author ruoyi
+ */
+public class Md5Utils
+{
+    private static final Logger log = LoggerFactory.getLogger(Md5Utils.class);
+
+    private static byte[] md5(String s)
+    {
+        MessageDigest algorithm;
+        try
+        {
+            algorithm = MessageDigest.getInstance("MD5");
+            algorithm.reset();
+            algorithm.update(s.getBytes("UTF-8"));
+            byte[] messageDigest = algorithm.digest();
+            return messageDigest;
+        }
+        catch (Exception e)
+        {
+            log.error("MD5 Error...", e);
+        }
+        return null;
+    }
+
+    private static final String toHex(byte hash[])
+    {
+        if (hash == null)
+        {
+            return null;
+        }
+        StringBuffer buf = new StringBuffer(hash.length * 2);
+        int i;
+
+        for (i = 0; i < hash.length; i++)
+        {
+            if ((hash[i] & 0xff) < 0x10)
+            {
+                buf.append("0");
+            }
+            buf.append(Long.toString(hash[i] & 0xff, 16));
+        }
+        return buf.toString();
+    }
+
+    public static String hash(String s)
+    {
+        try
+        {
+            return new String(toHex(md5(s)).getBytes("UTF-8"), "UTF-8");
+        }
+        catch (Exception e)
+        {
+            log.error("not supported charset...{}", e);
+            return s;
+        }
+    }
+}
diff --git a/src/main/java/com/ruoyi/common/utils/StringUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java
similarity index 91%
rename from src/main/java/com/ruoyi/common/utils/StringUtils.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java
index 856a0d33..61450886 100644
--- a/src/main/java/com/ruoyi/common/utils/StringUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java
@@ -2,7 +2,6 @@ package com.ruoyi.common.utils;
 
 import java.util.Collection;
 import java.util.Map;
-import org.apache.commons.lang.text.StrBuilder;
 import com.ruoyi.common.support.StrFormatter;
 
 /**
@@ -257,19 +256,6 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils
         return StrFormatter.format(template, params);
     }
 
-    /**
-     * 驼峰首字符小写
-     */
-    public static String uncapitalize(String str)
-    {
-        int strLen;
-        if (str == null || (strLen = str.length()) == 0)
-        {
-            return str;
-        }
-        return new StrBuilder(strLen).append(Character.toLowerCase(str.charAt(0))).append(str.substring(1)).toString();
-    }
-
     /**
      * 下划线转驼峰命名
      */
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/YamlUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/YamlUtil.java
new file mode 100644
index 00000000..e8e05b5f
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/YamlUtil.java
@@ -0,0 +1,87 @@
+package com.ruoyi.common.utils;
+
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import org.yaml.snakeyaml.DumperOptions;
+import org.yaml.snakeyaml.Yaml;
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * 配置处理工具类
+ * 
+ * @author yml
+ */
+public class YamlUtil
+{
+    public static Map<?, ?> loadYaml(String fileName) throws FileNotFoundException
+    {
+        InputStream in = YamlUtil.class.getClassLoader().getResourceAsStream(fileName);
+        return StringUtils.isNotEmpty(fileName) ? (LinkedHashMap<?, ?>) new Yaml().load(in) : null;
+    }
+
+    public static void dumpYaml(String fileName, Map<?, ?> map) throws IOException
+    {
+        if (StringUtils.isNotEmpty(fileName))
+        {
+            FileWriter fileWriter = new FileWriter(YamlUtil.class.getResource(fileName).getFile());
+            DumperOptions options = new DumperOptions();
+            options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
+            Yaml yaml = new Yaml(options);
+            yaml.dump(map, fileWriter);
+        }
+    }
+
+    public static Object getProperty(Map<?, ?> map, Object qualifiedKey)
+    {
+        if (map != null && !map.isEmpty() && qualifiedKey != null)
+        {
+            String input = String.valueOf(qualifiedKey);
+            if (!input.equals(""))
+            {
+                if (input.contains("."))
+                {
+                    int index = input.indexOf(".");
+                    String left = input.substring(0, index);
+                    String right = input.substring(index + 1, input.length());
+                    return getProperty((Map<?, ?>) map.get(left), right);
+                }
+                else if (map.containsKey(input))
+                {
+                    return map.get(input);
+                }
+                else
+                {
+                    return null;
+                }
+            }
+        }
+        return null;
+    }
+
+    @SuppressWarnings("unchecked")
+    public static void setProperty(Map<?, ?> map, Object qualifiedKey, Object value)
+    {
+        if (map != null && !map.isEmpty() && qualifiedKey != null)
+        {
+            String input = String.valueOf(qualifiedKey);
+            if (!input.equals(""))
+            {
+                if (input.contains("."))
+                {
+                    int index = input.indexOf(".");
+                    String left = input.substring(0, index);
+                    String right = input.substring(index + 1, input.length());
+                    setProperty((Map<?, ?>) map.get(left), right, value);
+                }
+                else
+                {
+                    ((Map<Object, Object>) map).put(qualifiedKey, value);
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/common/utils/bean/BeanUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanUtils.java
similarity index 96%
rename from src/main/java/com/ruoyi/common/utils/bean/BeanUtils.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanUtils.java
index 32b180db..c214cf2c 100644
--- a/src/main/java/com/ruoyi/common/utils/bean/BeanUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanUtils.java
@@ -1,122 +1,122 @@
-package com.ruoyi.common.utils.bean;
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Bean 工具类
- * 
- * @author ruoyi
- */
-public class BeanUtils
-{
-    /** Bean方法名中属性名开始的下标 */
-    private static final int BEAN_METHOD_PROP_INDEX = 3;
-
-    /** * 匹配getter方法的正则表达式 */
-    private static final Pattern GET_PATTERN = Pattern.compile("get(\\p{javaUpperCase}\\w*)");
-
-    /** * 匹配setter方法的正则表达式 */
-    private static final Pattern SET_PATTERN = Pattern.compile("set(\\p{javaUpperCase}\\w*)");
-
-    /**
-     * Bean属性复制工具方法。
-     * 
-     * @param dest 目标对象
-     * @param src 源对象
-     */
-    public static void copyBeanProp(Object dest, Object src)
-    {
-        List<Method> destSetters = getSetterMethods(dest);
-        List<Method> srcGetters = getGetterMethods(src);
-        try
-        {
-            for (Method setter : destSetters)
-            {
-                for (Method getter : srcGetters)
-                {
-                    if (isMethodPropEquals(setter.getName(), getter.getName())
-                            && setter.getParameterTypes()[0].equals(getter.getReturnType()))
-                    {
-                        setter.invoke(dest, getter.invoke(src));
-                    }
-                }
-            }
-        }
-        catch (Exception e)
-        {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * 获取对象的setter方法。
-     * 
-     * @param obj 对象
-     * @return 对象的setter方法列表
-     */
-    public static List<Method> getSetterMethods(Object obj)
-    {
-        // setter方法列表
-        List<Method> setterMethods = new ArrayList<Method>();
-
-        // 获取所有方法
-        Method[] methods = obj.getClass().getMethods();
-
-        // 查找setter方法
-
-        for (Method method : methods)
-        {
-            Matcher m = SET_PATTERN.matcher(method.getName());
-            if (m.matches() && (method.getParameterTypes().length == 1))
-            {
-                setterMethods.add(method);
-            }
-        }
-        // 返回setter方法列表
-        return setterMethods;
-    }
-
-    /**
-     * 获取对象的getter方法。
-     * 
-     * @param obj 对象
-     * @return 对象的getter方法列表
-     */
-
-    public static List<Method> getGetterMethods(Object obj)
-    {
-        // getter方法列表
-        List<Method> getterMethods = new ArrayList<Method>();
-        // 获取所有方法
-        Method[] methods = obj.getClass().getMethods();
-        // 查找getter方法
-        for (Method method : methods)
-        {
-            Matcher m = GET_PATTERN.matcher(method.getName());
-            if (m.matches() && (method.getParameterTypes().length == 0))
-            {
-                getterMethods.add(method);
-            }
-        }
-        // 返回getter方法列表
-        return getterMethods;
-    }
-
-    /**
-     * 检查Bean方法名中的属性名是否相等。<br>
-     * 如getName()和setName()属性名一样,getName()和setAge()属性名不一样。
-     * 
-     * @param m1 方法名1
-     * @param m2 方法名2
-     * @return 属性名一样返回true,否则返回false
-     */
-
-    public static boolean isMethodPropEquals(String m1, String m2)
-    {
-        return m1.substring(BEAN_METHOD_PROP_INDEX).equals(m2.substring(BEAN_METHOD_PROP_INDEX));
-    }
-}
+package com.ruoyi.common.utils.bean;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Bean 工具类
+ * 
+ * @author ruoyi
+ */
+public class BeanUtils
+{
+    /** Bean方法名中属性名开始的下标 */
+    private static final int BEAN_METHOD_PROP_INDEX = 3;
+
+    /** * 匹配getter方法的正则表达式 */
+    private static final Pattern GET_PATTERN = Pattern.compile("get(\\p{javaUpperCase}\\w*)");
+
+    /** * 匹配setter方法的正则表达式 */
+    private static final Pattern SET_PATTERN = Pattern.compile("set(\\p{javaUpperCase}\\w*)");
+
+    /**
+     * Bean属性复制工具方法。
+     * 
+     * @param dest 目标对象
+     * @param src 源对象
+     */
+    public static void copyBeanProp(Object dest, Object src)
+    {
+        List<Method> destSetters = getSetterMethods(dest);
+        List<Method> srcGetters = getGetterMethods(src);
+        try
+        {
+            for (Method setter : destSetters)
+            {
+                for (Method getter : srcGetters)
+                {
+                    if (isMethodPropEquals(setter.getName(), getter.getName())
+                            && setter.getParameterTypes()[0].equals(getter.getReturnType()))
+                    {
+                        setter.invoke(dest, getter.invoke(src));
+                    }
+                }
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 获取对象的setter方法。
+     * 
+     * @param obj 对象
+     * @return 对象的setter方法列表
+     */
+    public static List<Method> getSetterMethods(Object obj)
+    {
+        // setter方法列表
+        List<Method> setterMethods = new ArrayList<Method>();
+
+        // 获取所有方法
+        Method[] methods = obj.getClass().getMethods();
+
+        // 查找setter方法
+
+        for (Method method : methods)
+        {
+            Matcher m = SET_PATTERN.matcher(method.getName());
+            if (m.matches() && (method.getParameterTypes().length == 1))
+            {
+                setterMethods.add(method);
+            }
+        }
+        // 返回setter方法列表
+        return setterMethods;
+    }
+
+    /**
+     * 获取对象的getter方法。
+     * 
+     * @param obj 对象
+     * @return 对象的getter方法列表
+     */
+
+    public static List<Method> getGetterMethods(Object obj)
+    {
+        // getter方法列表
+        List<Method> getterMethods = new ArrayList<Method>();
+        // 获取所有方法
+        Method[] methods = obj.getClass().getMethods();
+        // 查找getter方法
+        for (Method method : methods)
+        {
+            Matcher m = GET_PATTERN.matcher(method.getName());
+            if (m.matches() && (method.getParameterTypes().length == 0))
+            {
+                getterMethods.add(method);
+            }
+        }
+        // 返回getter方法列表
+        return getterMethods;
+    }
+
+    /**
+     * 检查Bean方法名中的属性名是否相等。<br>
+     * 如getName()和setName()属性名一样,getName()和setAge()属性名不一样。
+     * 
+     * @param m1 方法名1
+     * @param m2 方法名2
+     * @return 属性名一样返回true,否则返回false
+     */
+
+    public static boolean isMethodPropEquals(String m1, String m2)
+    {
+        return m1.substring(BEAN_METHOD_PROP_INDEX).equals(m2.substring(BEAN_METHOD_PROP_INDEX));
+    }
+}
diff --git a/src/main/java/com/ruoyi/common/utils/file/FileUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java
similarity index 95%
rename from src/main/java/com/ruoyi/common/utils/file/FileUtils.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java
index f538bee3..00116782 100644
--- a/src/main/java/com/ruoyi/common/utils/file/FileUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java
@@ -1,89 +1,89 @@
-package com.ruoyi.common.utils.file;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * 文件处理工具类
- * 
- * @author ruoyi
- */
-public class FileUtils
-{
-    /**
-     * 输出指定文件的byte数组
-     * 
-     * @param filename 文件
-     * @return
-     */
-    public static void writeBytes(String filePath, OutputStream os) throws IOException
-    {
-        FileInputStream fis = null;
-        try
-        {
-            File file = new File(filePath);
-            if (!file.exists())
-            {
-                throw new FileNotFoundException(filePath);
-            }
-            fis = new FileInputStream(file);
-            byte[] b = new byte[1024];
-            int length;
-            while ((length = fis.read(b)) > 0)
-            {
-                os.write(b, 0, length);
-            }
-        }
-        catch (IOException e)
-        {
-            throw e;
-        }
-        finally
-        {
-            if (os != null)
-            {
-                try
-                {
-                    os.close();
-                }
-                catch (IOException e1)
-                {
-                    e1.printStackTrace();
-                }
-            }
-            if (fis != null)
-            {
-                try
-                {
-                    fis.close();
-                }
-                catch (IOException e1)
-                {
-                    e1.printStackTrace();
-                }
-            }
-        }
-    }
-
-    /**
-     * 删除文件
-     * 
-     * @param filePath 文件
-     * @return
-     */
-    public static boolean deleteFile(String filePath)
-    {
-        boolean flag = false;
-        File file = new File(filePath);
-        // 路径为文件且不为空则进行删除
-        if (file.isFile() && file.exists())
-        {
-            file.delete();
-            flag = true;
-        }
-        return flag;
-    }
-}
+package com.ruoyi.common.utils.file;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ * 文件处理工具类
+ * 
+ * @author ruoyi
+ */
+public class FileUtils
+{
+    /**
+     * 输出指定文件的byte数组
+     * 
+     * @param filename 文件
+     * @return
+     */
+    public static void writeBytes(String filePath, OutputStream os) throws IOException
+    {
+        FileInputStream fis = null;
+        try
+        {
+            File file = new File(filePath);
+            if (!file.exists())
+            {
+                throw new FileNotFoundException(filePath);
+            }
+            fis = new FileInputStream(file);
+            byte[] b = new byte[1024];
+            int length;
+            while ((length = fis.read(b)) > 0)
+            {
+                os.write(b, 0, length);
+            }
+        }
+        catch (IOException e)
+        {
+            throw e;
+        }
+        finally
+        {
+            if (os != null)
+            {
+                try
+                {
+                    os.close();
+                }
+                catch (IOException e1)
+                {
+                    e1.printStackTrace();
+                }
+            }
+            if (fis != null)
+            {
+                try
+                {
+                    fis.close();
+                }
+                catch (IOException e1)
+                {
+                    e1.printStackTrace();
+                }
+            }
+        }
+    }
+
+    /**
+     * 删除文件
+     * 
+     * @param filePath 文件
+     * @return
+     */
+    public static boolean deleteFile(String filePath)
+    {
+        boolean flag = false;
+        File file = new File(filePath);
+        // 路径为文件且不为空则进行删除
+        if (file.isFile() && file.exists())
+        {
+            file.delete();
+            flag = true;
+        }
+        return flag;
+    }
+}
diff --git a/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
similarity index 97%
rename from src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
index a0275185..323dbc1a 100644
--- a/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
@@ -1,248 +1,248 @@
-package com.ruoyi.common.utils.http;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.net.ConnectException;
-import java.net.SocketTimeoutException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.security.cert.X509Certificate;
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * 通用http发送方法
- * 
- * @author ruoyi
- */
-public class HttpUtils
-{
-    private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);
-
-    /**
-     * 向指定 URL 发送GET方法的请求
-     *
-     * @param url 发送请求的 URL
-     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
-     * @return 所代表远程资源的响应结果
-     */
-    public static String sendGet(String url, String param)
-    {
-        StringBuilder result = new StringBuilder();
-        BufferedReader in = null;
-        try
-        {
-            String urlNameString = url + "?" + param;
-            log.info("sendGet - {}", urlNameString);
-            URL realUrl = new URL(urlNameString);
-            URLConnection connection = realUrl.openConnection();
-            connection.setRequestProperty("accept", "*/*");
-            connection.setRequestProperty("connection", "Keep-Alive");
-            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            connection.connect();
-            in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
-            String line;
-            while ((line = in.readLine()) != null)
-            {
-                result.append(line);
-            }
-            log.info("recv - {}", result);
-        }
-        catch (ConnectException e)
-        {
-            log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e);
-        }
-        catch (SocketTimeoutException e)
-        {
-            log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e);
-        }
-        catch (IOException e)
-        {
-            log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e);
-        }
-        catch (Exception e)
-        {
-            log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e);
-        }
-        finally
-        {
-            try
-            {
-                if (in != null)
-                {
-                    in.close();
-                }
-            }
-            catch (Exception ex)
-            {
-                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
-            }
-        }
-        return result.toString();
-    }
-
-    /**
-     * 向指定 URL 发送POST方法的请求
-     *
-     * @param url 发送请求的 URL
-     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
-     * @return 所代表远程资源的响应结果
-     */
-    public static String sendPost(String url, String param)
-    {
-        PrintWriter out = null;
-        BufferedReader in = null;
-        StringBuilder result = new StringBuilder();
-        try
-        {
-            String urlNameString = url + "?" + param;
-            log.info("sendPost - {}", urlNameString);
-            URL realUrl = new URL(urlNameString);
-            URLConnection conn = realUrl.openConnection();
-            conn.setRequestProperty("accept", "*/*");
-            conn.setRequestProperty("connection", "Keep-Alive");
-            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            conn.setRequestProperty("Accept-Charset", "utf-8");
-            conn.setRequestProperty("contentType", "utf-8");
-            conn.setDoOutput(true);
-            conn.setDoInput(true);
-            out = new PrintWriter(conn.getOutputStream());
-            out.print(param);
-            out.flush();
-            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
-            String line;
-            while ((line = in.readLine()) != null)
-            {
-                result.append(line);
-            }
-            log.info("recv - {}", result);
-        }
-        catch (ConnectException e)
-        {
-            log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
-        }
-        catch (SocketTimeoutException e)
-        {
-            log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
-        }
-        catch (IOException e)
-        {
-            log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
-        }
-        catch (Exception e)
-        {
-            log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
-        }
-        finally
-        {
-            try
-            {
-                if (out != null)
-                {
-                    out.close();
-                }
-                if (in != null)
-                {
-                    in.close();
-                }
-            }
-            catch (IOException ex)
-            {
-                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
-            }
-        }
-        return result.toString();
-    }
-
-    public static String sendSSLPost(String url, String param)
-    {
-        StringBuilder result = new StringBuilder();
-        String urlNameString = url + "?" + param;
-        try
-        {
-            log.info("sendSSLPost - {}", urlNameString);
-            SSLContext sc = SSLContext.getInstance("SSL");
-            sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
-            URL console = new URL(urlNameString);
-            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
-            conn.setRequestProperty("accept", "*/*");
-            conn.setRequestProperty("connection", "Keep-Alive");
-            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-            conn.setRequestProperty("Accept-Charset", "utf-8");
-            conn.setRequestProperty("contentType", "utf-8");
-            conn.setDoOutput(true);
-            conn.setDoInput(true);
-
-            conn.setSSLSocketFactory(sc.getSocketFactory());
-            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
-            conn.connect();
-            InputStream is = conn.getInputStream();
-            BufferedReader br = new BufferedReader(new InputStreamReader(is));
-            String ret = "";
-            while ((ret = br.readLine()) != null)
-            {
-                if (ret != null && !ret.trim().equals(""))
-                {
-                    result.append(new String(ret.getBytes("ISO-8859-1"), "utf-8"));
-                }
-            }
-            log.info("recv - {}", result);
-            conn.disconnect();
-            br.close();
-        }
-        catch (ConnectException e)
-        {
-            log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
-        }
-        catch (SocketTimeoutException e)
-        {
-            log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
-        }
-        catch (IOException e)
-        {
-            log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
-        }
-        catch (Exception e)
-        {
-            log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
-        }
-        return result.toString();
-    }
-
-    private static class TrustAnyTrustManager implements X509TrustManager
-    {
-        @Override
-        public void checkClientTrusted(X509Certificate[] chain, String authType)
-        {
-        }
-
-        @Override
-        public void checkServerTrusted(X509Certificate[] chain, String authType)
-        {
-        }
-
-        @Override
-        public X509Certificate[] getAcceptedIssuers()
-        {
-            return new X509Certificate[] {};
-        }
-    }
-
-    private static class TrustAnyHostnameVerifier implements HostnameVerifier
-    {
-        @Override
-        public boolean verify(String hostname, SSLSession session)
-        {
-            return true;
-        }
-    }
+package com.ruoyi.common.utils.http;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.ConnectException;
+import java.net.SocketTimeoutException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.security.cert.X509Certificate;
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 通用http发送方法
+ * 
+ * @author ruoyi
+ */
+public class HttpUtils
+{
+    private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);
+
+    /**
+     * 向指定 URL 发送GET方法的请求
+     *
+     * @param url 发送请求的 URL
+     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+     * @return 所代表远程资源的响应结果
+     */
+    public static String sendGet(String url, String param)
+    {
+        StringBuilder result = new StringBuilder();
+        BufferedReader in = null;
+        try
+        {
+            String urlNameString = url + "?" + param;
+            log.info("sendGet - {}", urlNameString);
+            URL realUrl = new URL(urlNameString);
+            URLConnection connection = realUrl.openConnection();
+            connection.setRequestProperty("accept", "*/*");
+            connection.setRequestProperty("connection", "Keep-Alive");
+            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            connection.connect();
+            in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+            String line;
+            while ((line = in.readLine()) != null)
+            {
+                result.append(line);
+            }
+            log.info("recv - {}", result);
+        }
+        catch (ConnectException e)
+        {
+            log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e);
+        }
+        finally
+        {
+            try
+            {
+                if (in != null)
+                {
+                    in.close();
+                }
+            }
+            catch (Exception ex)
+            {
+                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
+            }
+        }
+        return result.toString();
+    }
+
+    /**
+     * 向指定 URL 发送POST方法的请求
+     *
+     * @param url 发送请求的 URL
+     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+     * @return 所代表远程资源的响应结果
+     */
+    public static String sendPost(String url, String param)
+    {
+        PrintWriter out = null;
+        BufferedReader in = null;
+        StringBuilder result = new StringBuilder();
+        try
+        {
+            String urlNameString = url + "?" + param;
+            log.info("sendPost - {}", urlNameString);
+            URL realUrl = new URL(urlNameString);
+            URLConnection conn = realUrl.openConnection();
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            conn.setRequestProperty("Accept-Charset", "utf-8");
+            conn.setRequestProperty("contentType", "utf-8");
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            out = new PrintWriter(conn.getOutputStream());
+            out.print(param);
+            out.flush();
+            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
+            String line;
+            while ((line = in.readLine()) != null)
+            {
+                result.append(line);
+            }
+            log.info("recv - {}", result);
+        }
+        catch (ConnectException e)
+        {
+            log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
+        }
+        finally
+        {
+            try
+            {
+                if (out != null)
+                {
+                    out.close();
+                }
+                if (in != null)
+                {
+                    in.close();
+                }
+            }
+            catch (IOException ex)
+            {
+                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
+            }
+        }
+        return result.toString();
+    }
+
+    public static String sendSSLPost(String url, String param)
+    {
+        StringBuilder result = new StringBuilder();
+        String urlNameString = url + "?" + param;
+        try
+        {
+            log.info("sendSSLPost - {}", urlNameString);
+            SSLContext sc = SSLContext.getInstance("SSL");
+            sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
+            URL console = new URL(urlNameString);
+            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            conn.setRequestProperty("Accept-Charset", "utf-8");
+            conn.setRequestProperty("contentType", "utf-8");
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+
+            conn.setSSLSocketFactory(sc.getSocketFactory());
+            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
+            conn.connect();
+            InputStream is = conn.getInputStream();
+            BufferedReader br = new BufferedReader(new InputStreamReader(is));
+            String ret = "";
+            while ((ret = br.readLine()) != null)
+            {
+                if (ret != null && !ret.trim().equals(""))
+                {
+                    result.append(new String(ret.getBytes("ISO-8859-1"), "utf-8"));
+                }
+            }
+            log.info("recv - {}", result);
+            conn.disconnect();
+            br.close();
+        }
+        catch (ConnectException e)
+        {
+            log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
+        }
+        return result.toString();
+    }
+
+    private static class TrustAnyTrustManager implements X509TrustManager
+    {
+        @Override
+        public void checkClientTrusted(X509Certificate[] chain, String authType)
+        {
+        }
+
+        @Override
+        public void checkServerTrusted(X509Certificate[] chain, String authType)
+        {
+        }
+
+        @Override
+        public X509Certificate[] getAcceptedIssuers()
+        {
+            return new X509Certificate[] {};
+        }
+    }
+
+    private static class TrustAnyHostnameVerifier implements HostnameVerifier
+    {
+        @Override
+        public boolean verify(String hostname, SSLSession session)
+        {
+            return true;
+        }
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/common/xss/XssFilter.java b/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssFilter.java
similarity index 100%
rename from src/main/java/com/ruoyi/common/xss/XssFilter.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/xss/XssFilter.java
diff --git a/src/main/java/com/ruoyi/common/xss/XssHttpServletRequestWrapper.java b/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssHttpServletRequestWrapper.java
similarity index 100%
rename from src/main/java/com/ruoyi/common/xss/XssHttpServletRequestWrapper.java
rename to ruoyi-common/src/main/java/com/ruoyi/common/xss/XssHttpServletRequestWrapper.java
diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml
new file mode 100644
index 00000000..d89ca5c1
--- /dev/null
+++ b/ruoyi-framework/pom.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ruoyi</artifactId>
+        <groupId>com.ruoyi</groupId>
+        <version>3.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+	
+    <artifactId>ruoyi-framework</artifactId>
+	
+	<description>
+	    framework框架核心
+	</description>
+    
+    <dependencies>
+	    
+	     <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        
+    	 <!-- SpringBoot 拦截器 -->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-aop</artifactId>
+		</dependency>
+		
+		<!--阿里数据库连接池 -->
+		<dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+            <version>${druid.version}</version>
+        </dependency>
+		
+		<!--验证码 -->
+		<dependency>
+			<groupId>com.github.penggle</groupId>
+			<artifactId>kaptcha</artifactId>
+			<version>${kaptcha.version}</version>
+			<exclusions>
+				<exclusion>
+					<artifactId>javax.servlet-api</artifactId>
+					<groupId>javax.servlet</groupId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		
+		<!--Shiro核心框架 -->
+		<dependency>
+			<groupId>org.apache.shiro</groupId>
+			<artifactId>shiro-core</artifactId>
+			<version>${shiro.version}</version>
+		</dependency>
+		
+		<!-- Shiro使用Srping框架 -->
+		<dependency>
+			<groupId>org.apache.shiro</groupId>
+			<artifactId>shiro-spring</artifactId>
+			<version>${shiro.version}</version>
+		</dependency>
+
+		<!-- Shiro使用EhCache缓存框架 -->
+		<dependency>
+			<groupId>org.apache.shiro</groupId>
+			<artifactId>shiro-ehcache</artifactId>
+			<version>${shiro.version}</version>
+		</dependency>
+		
+		<!-- thymeleaf模板引擎和shiro框架的整合 -->
+		<dependency>
+			<groupId>com.github.theborakompanioni</groupId>
+			<artifactId>thymeleaf-extras-shiro</artifactId>
+			<version>${thymeleaf.extras.shiro.version}</version>
+		</dependency>
+		
+		<!-- 解析客户端操作系统、浏览器等 -->
+		<dependency>
+			<groupId>eu.bitwalker</groupId>
+			<artifactId>UserAgentUtils</artifactId>
+			<version>${bitwalker.version}</version>
+		</dependency>
+		
+		<dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-common</artifactId>
+            <version>${ruoyi.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-system</artifactId>
+            <version>${ruoyi.version}</version>
+        </dependency>
+		
+    </dependencies>
+    
+</project>
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
similarity index 82%
rename from src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
index 903d7114..2c04112b 100644
--- a/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
@@ -8,12 +8,12 @@ import org.aspectj.lang.annotation.Before;
 import org.aspectj.lang.annotation.Pointcut;
 import org.aspectj.lang.reflect.MethodSignature;
 import org.springframework.stereotype.Component;
+import com.ruoyi.common.annotation.DataScope;
+import com.ruoyi.common.base.BaseEntity;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.security.ShiroUtils;
-import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
-import com.ruoyi.framework.web.domain.BaseEntity;
-import com.ruoyi.project.system.role.domain.Role;
-import com.ruoyi.project.system.user.domain.User;
+import com.ruoyi.framework.util.ShiroUtils;
+import com.ruoyi.system.domain.SysRole;
+import com.ruoyi.system.domain.SysUser;
 
 /**
  * 数据过滤处理
@@ -40,7 +40,7 @@ public class DataScopeAspect
     public static final String DATA_SCOPE = "dataScope";
 
     // 配置织入点
-    @Pointcut("@annotation(com.ruoyi.framework.aspectj.lang.annotation.DataScope)")
+    @Pointcut("@annotation(com.ruoyi.common.annotation.DataScope)")
     public void dataScopePointCut()
     {
     }
@@ -60,7 +60,7 @@ public class DataScopeAspect
             return;
         }
         // 获取当前的用户
-        User currentUser = ShiroUtils.getUser();
+        SysUser currentUser = ShiroUtils.getUser();
         if (currentUser != null)
         {
             // 如果是超级管理员,则不过滤数据
@@ -77,11 +77,11 @@ public class DataScopeAspect
      * @param da 部门表别名
      * @return 标准连接条件对象
      */
-    public static void dataScopeFilter(JoinPoint joinPoint, User user, String alias)
+    public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String alias)
     {
         StringBuilder sqlString = new StringBuilder();
 
-        for (Role role : user.getRoles())
+        for (SysRole role : user.getRoles())
         {
             String dataScope = role.getDataScope();
             if (DATA_SCOPE_ALL.equals(dataScope))
diff --git a/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
similarity index 89%
rename from src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
index a6862655..c4eab3fb 100644
--- a/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
@@ -1,59 +1,59 @@
-package com.ruoyi.framework.aspectj;
-
-import java.lang.reflect.Method;
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Pointcut;
-import org.aspectj.lang.reflect.MethodSignature;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.framework.aspectj.lang.annotation.DataSource;
-import com.ruoyi.framework.datasource.DynamicDataSourceContextHolder;
-
-/**
- * 多数据源处理
- * 
- * @author ruoyi
- */
-@Aspect
-@Order(1)
-@Component
-public class DataSourceAspect
-{
-    protected Logger logger = LoggerFactory.getLogger(getClass());
-
-    @Pointcut("@annotation(com.ruoyi.framework.aspectj.lang.annotation.DataSource)")
-    public void dsPointCut()
-    {
-
-    }
-
-    @Around("dsPointCut()")
-    public Object around(ProceedingJoinPoint point) throws Throwable
-    {
-        MethodSignature signature = (MethodSignature) point.getSignature();
-
-        Method method = signature.getMethod();
-
-        DataSource dataSource = method.getAnnotation(DataSource.class);
-
-        if (StringUtils.isNotNull(dataSource))
-        {
-            DynamicDataSourceContextHolder.setDateSoureType(dataSource.value().name());
-        }
-
-        try
-        {
-            return point.proceed();
-        }
-        finally
-        {
-            // 销毁数据源 在执行方法之后
-            DynamicDataSourceContextHolder.clearDateSoureType();
-        }
-    }
-}
+package com.ruoyi.framework.aspectj;
+
+import java.lang.reflect.Method;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import com.ruoyi.common.annotation.DataSource;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.datasource.DynamicDataSourceContextHolder;
+
+/**
+ * 多数据源处理
+ * 
+ * @author ruoyi
+ */
+@Aspect
+@Order(1)
+@Component
+public class DataSourceAspect
+{
+    protected Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Pointcut("@annotation(com.ruoyi.common.annotation.DataSource)")
+    public void dsPointCut()
+    {
+
+    }
+
+    @Around("dsPointCut()")
+    public Object around(ProceedingJoinPoint point) throws Throwable
+    {
+        MethodSignature signature = (MethodSignature) point.getSignature();
+
+        Method method = signature.getMethod();
+
+        DataSource dataSource = method.getAnnotation(DataSource.class);
+
+        if (StringUtils.isNotNull(dataSource))
+        {
+            DynamicDataSourceContextHolder.setDateSoureType(dataSource.value().name());
+        }
+
+        try
+        {
+            return point.proceed();
+        }
+        finally
+        {
+            // 销毁数据源 在执行方法之后
+            DynamicDataSourceContextHolder.clearDateSoureType();
+        }
+    }
+}
diff --git a/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
similarity index 83%
rename from src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
index d5de1a9e..6bc76866 100644
--- a/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
@@ -12,16 +12,16 @@ import org.aspectj.lang.reflect.MethodSignature;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
-import com.alibaba.fastjson.JSONObject;
-import com.ruoyi.common.utils.ServletUtils;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessStatus;
+import com.ruoyi.common.json.JSON;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.security.ShiroUtils;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessStatus;
 import com.ruoyi.framework.manager.AsyncManager;
 import com.ruoyi.framework.manager.factory.AsyncFactory;
-import com.ruoyi.project.monitor.operlog.domain.OperLog;
-import com.ruoyi.project.system.user.domain.User;
+import com.ruoyi.framework.util.ServletUtils;
+import com.ruoyi.framework.util.ShiroUtils;
+import com.ruoyi.system.domain.SysOperLog;
+import com.ruoyi.system.domain.SysUser;
 
 /**
  * 操作日志记录处理
@@ -35,7 +35,7 @@ public class LogAspect
     private static final Logger log = LoggerFactory.getLogger(LogAspect.class);
 
     // 配置织入点
-    @Pointcut("@annotation(com.ruoyi.framework.aspectj.lang.annotation.Log)")
+    @Pointcut("@annotation(com.ruoyi.common.annotation.Log)")
     public void logPointCut()
     {
     }
@@ -75,10 +75,10 @@ public class LogAspect
             }
 
             // 获取当前的用户
-            User currentUser = ShiroUtils.getUser();
+            SysUser currentUser = ShiroUtils.getUser();
 
             // *========数据库日志=========*//
-            OperLog operLog = new OperLog();
+            SysOperLog operLog = new SysOperLog();
             operLog.setStatus(BusinessStatus.SUCCESS.ordinal());
             // 请求的地址
             String ip = ShiroUtils.getIp();
@@ -125,7 +125,7 @@ public class LogAspect
      * @return 方法描述
      * @throws Exception
      */
-    public void getControllerMethodDescription(Log log, OperLog operLog) throws Exception
+    public void getControllerMethodDescription(Log log, SysOperLog operLog) throws Exception
     {
         // 设置action动作
         operLog.setBusinessType(log.businessType().ordinal());
@@ -144,13 +144,13 @@ public class LogAspect
     /**
      * 获取请求的参数,放到log中
      * 
-     * @param operLog
-     * @param request
+     * @param operLog 操作日志
+     * @throws Exception 异常
      */
-    private void setRequestValue(OperLog operLog)
+    private void setRequestValue(SysOperLog operLog) throws Exception
     {
         Map<String, String[]> map = ServletUtils.getRequest().getParameterMap();
-        String params = JSONObject.toJSONString(map);
+        String params = JSON.marshal(map);
         operLog.setOperParam(StringUtils.substring(params, 0, 255));
     }
 
diff --git a/src/main/java/com/ruoyi/framework/config/CaptchaConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/CaptchaConfig.java
similarity index 100%
rename from src/main/java/com/ruoyi/framework/config/CaptchaConfig.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/config/CaptchaConfig.java
diff --git a/src/main/java/com/ruoyi/framework/config/DruidConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java
similarity index 93%
rename from src/main/java/com/ruoyi/framework/config/DruidConfig.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java
index 1fac0617..b4e9a522 100644
--- a/src/main/java/com/ruoyi/framework/config/DruidConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java
@@ -9,7 +9,7 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Primary;
 import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
-import com.ruoyi.framework.aspectj.lang.enums.DataSourceType;
+import com.ruoyi.common.enums.DataSourceType;
 import com.ruoyi.framework.datasource.DynamicDataSource;
 
 /**
diff --git a/src/main/java/com/ruoyi/framework/config/FilterConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java
similarity index 90%
rename from src/main/java/com/ruoyi/framework/config/FilterConfig.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java
index 11b61935..92d010e8 100644
--- a/src/main/java/com/ruoyi/framework/config/FilterConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java
@@ -1,12 +1,12 @@
 package com.ruoyi.framework.config;
 
+import java.util.HashMap;
 import java.util.Map;
 import javax.servlet.DispatcherType;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.web.servlet.FilterRegistrationBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import com.google.common.collect.Maps;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.xss.XssFilter;
 
@@ -37,7 +37,7 @@ public class FilterConfig
         registration.addUrlPatterns(StringUtils.split(urlPatterns, ","));
         registration.setName("xssFilter");
         registration.setOrder(Integer.MAX_VALUE);
-        Map<String, String> initParameters = Maps.newHashMap();
+        Map<String, String> initParameters = new HashMap<String, String>();
         initParameters.put("excludes", excludes);
         initParameters.put("enabled", enabled);
         registration.setInitParameters(initParameters);
diff --git a/src/main/java/com/ruoyi/framework/config/GenConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/GenConfig.java
similarity index 83%
rename from src/main/java/com/ruoyi/framework/config/GenConfig.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/config/GenConfig.java
index ecd5fcdf..109c0cab 100644
--- a/src/main/java/com/ruoyi/framework/config/GenConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/GenConfig.java
@@ -60,11 +60,4 @@ public class GenConfig
     {
         GenConfig.tablePrefix = tablePrefix;
     }
-
-    @Override
-    public String toString()
-    {
-        return "GenConfig [getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
-                + "]";
-    }
 }
diff --git a/src/main/java/com/ruoyi/framework/config/I18nConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/I18nConfig.java
similarity index 100%
rename from src/main/java/com/ruoyi/framework/config/I18nConfig.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/config/I18nConfig.java
diff --git a/src/main/java/com/ruoyi/framework/config/KaptchaTextCreator.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/KaptchaTextCreator.java
similarity index 100%
rename from src/main/java/com/ruoyi/framework/config/KaptchaTextCreator.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/config/KaptchaTextCreator.java
diff --git a/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
similarity index 91%
rename from src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
index 4e505087..57d13915 100644
--- a/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
@@ -5,6 +5,7 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import com.ruoyi.common.config.Global;
 
 /**
  * 通用配置
@@ -33,7 +34,7 @@ public class ResourcesConfig implements WebMvcConfigurer
     public void addResourceHandlers(ResourceHandlerRegistry registry)
     {
         /** 文件上传路径 */
-        registry.addResourceHandler("/profile/**").addResourceLocations("file:" + RuoYiConfig.getProfile());
+        registry.addResourceHandler("/profile/**").addResourceLocations("file:" + Global.getProfile());
 
         /** swagger配置 */
         registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
diff --git a/src/main/java/com/ruoyi/framework/config/ShiroConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java
similarity index 100%
rename from src/main/java/com/ruoyi/framework/config/ShiroConfig.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java
diff --git a/src/main/java/com/ruoyi/framework/datasource/DynamicDataSource.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSource.java
similarity index 96%
rename from src/main/java/com/ruoyi/framework/datasource/DynamicDataSource.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSource.java
index d2aab1b4..2ece8dbf 100644
--- a/src/main/java/com/ruoyi/framework/datasource/DynamicDataSource.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSource.java
@@ -1,26 +1,26 @@
-package com.ruoyi.framework.datasource;
-
-import java.util.Map;
-import javax.sql.DataSource;
-import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
-
-/**
- * 动态数据源
- * 
- * @author ruoyi
- */
-public class DynamicDataSource extends AbstractRoutingDataSource
-{
-    public DynamicDataSource(DataSource defaultTargetDataSource, Map<Object, Object> targetDataSources)
-    {
-        super.setDefaultTargetDataSource(defaultTargetDataSource);
-        super.setTargetDataSources(targetDataSources);
-        super.afterPropertiesSet();
-    }
-
-    @Override
-    protected Object determineCurrentLookupKey()
-    {
-        return DynamicDataSourceContextHolder.getDateSoureType();
-    }
+package com.ruoyi.framework.datasource;
+
+import java.util.Map;
+import javax.sql.DataSource;
+import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
+
+/**
+ * 动态数据源
+ * 
+ * @author ruoyi
+ */
+public class DynamicDataSource extends AbstractRoutingDataSource
+{
+    public DynamicDataSource(DataSource defaultTargetDataSource, Map<Object, Object> targetDataSources)
+    {
+        super.setDefaultTargetDataSource(defaultTargetDataSource);
+        super.setTargetDataSources(targetDataSources);
+        super.afterPropertiesSet();
+    }
+
+    @Override
+    protected Object determineCurrentLookupKey()
+    {
+        return DynamicDataSourceContextHolder.getDateSoureType();
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java
similarity index 96%
rename from src/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java
index 3a3904c0..eb8b7f3d 100644
--- a/src/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java
@@ -1,45 +1,45 @@
-package com.ruoyi.framework.datasource;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * 数据源切换处理
- * 
- * @author ruoyi
- */
-public class DynamicDataSourceContextHolder
-{
-    public static final Logger log = LoggerFactory.getLogger(DynamicDataSourceContextHolder.class);
-
-    /**
-     * 使用ThreadLocal维护变量,ThreadLocal为每个使用该变量的线程提供独立的变量副本,
-     *  所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
-     */
-    private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();
-
-    /**
-     * 设置数据源的变量
-     */
-    public static void setDateSoureType(String dsType)
-    {
-        log.info("切换到{}数据源", dsType);
-        CONTEXT_HOLDER.set(dsType);
-    }
-
-    /**
-     * 获得数据源的变量
-     */
-    public static String getDateSoureType()
-    {
-        return CONTEXT_HOLDER.get();
-    }
-
-    /**
-     * 清空数据源变量
-     */
-    public static void clearDateSoureType()
-    {
-        CONTEXT_HOLDER.remove();
-    }
-}
+package com.ruoyi.framework.datasource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 数据源切换处理
+ * 
+ * @author ruoyi
+ */
+public class DynamicDataSourceContextHolder
+{
+    public static final Logger log = LoggerFactory.getLogger(DynamicDataSourceContextHolder.class);
+
+    /**
+     * 使用ThreadLocal维护变量,ThreadLocal为每个使用该变量的线程提供独立的变量副本,
+     *  所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
+     */
+    private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();
+
+    /**
+     * 设置数据源的变量
+     */
+    public static void setDateSoureType(String dsType)
+    {
+        log.info("切换到{}数据源", dsType);
+        CONTEXT_HOLDER.set(dsType);
+    }
+
+    /**
+     * 获得数据源的变量
+     */
+    public static String getDateSoureType()
+    {
+        return CONTEXT_HOLDER.get();
+    }
+
+    /**
+     * 清空数据源变量
+     */
+    public static void clearDateSoureType()
+    {
+        CONTEXT_HOLDER.remove();
+    }
+}
diff --git a/src/main/java/com/ruoyi/framework/manager/AsyncManager.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/AsyncManager.java
similarity index 100%
rename from src/main/java/com/ruoyi/framework/manager/AsyncManager.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/manager/AsyncManager.java
diff --git a/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java
similarity index 75%
rename from src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java
index 5e1016d0..4542e84f 100644
--- a/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java
@@ -5,17 +5,17 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.utils.AddressUtils;
-import com.ruoyi.common.utils.LogUtils;
-import com.ruoyi.common.utils.ServletUtils;
-import com.ruoyi.common.utils.security.ShiroUtils;
-import com.ruoyi.common.utils.spring.SpringUtils;
-import com.ruoyi.project.monitor.logininfor.domain.Logininfor;
-import com.ruoyi.project.monitor.logininfor.service.LogininforServiceImpl;
-import com.ruoyi.project.monitor.online.domain.OnlineSession;
-import com.ruoyi.project.monitor.online.domain.UserOnline;
-import com.ruoyi.project.monitor.online.service.IUserOnlineService;
-import com.ruoyi.project.monitor.operlog.domain.OperLog;
-import com.ruoyi.project.monitor.operlog.service.IOperLogService;
+import com.ruoyi.framework.shiro.session.OnlineSession;
+import com.ruoyi.framework.util.LogUtils;
+import com.ruoyi.framework.util.ServletUtils;
+import com.ruoyi.framework.util.ShiroUtils;
+import com.ruoyi.framework.util.SpringUtils;
+import com.ruoyi.system.domain.SysLogininfor;
+import com.ruoyi.system.domain.SysOperLog;
+import com.ruoyi.system.domain.SysUserOnline;
+import com.ruoyi.system.service.ISysOperLogService;
+import com.ruoyi.system.service.impl.SysLogininforServiceImpl;
+import com.ruoyi.system.service.impl.SysUserOnlineServiceImpl;
 import eu.bitwalker.useragentutils.UserAgent;
 
 /**
@@ -41,7 +41,7 @@ public class AsyncFactory
             @Override
             public void run()
             {
-                UserOnline online = new UserOnline();
+                SysUserOnline online = new SysUserOnline();
                 online.setSessionId(String.valueOf(session.getId()));
                 online.setDeptName(session.getDeptName());
                 online.setLoginName(session.getLoginName());
@@ -53,8 +53,7 @@ public class AsyncFactory
                 online.setBrowser(session.getBrowser());
                 online.setOs(session.getOs());
                 online.setStatus(session.getStatus());
-                online.setSession(session);
-                SpringUtils.getBean(IUserOnlineService.class).saveOnline(online);
+                SpringUtils.getBean(SysUserOnlineServiceImpl.class).saveOnline(online);
 
             }
         };
@@ -66,7 +65,7 @@ public class AsyncFactory
      * @param operLog 操作日志信息
      * @return 任务task
      */
-    public static TimerTask recordOper(final OperLog operLog)
+    public static TimerTask recordOper(final SysOperLog operLog)
     {
         return new TimerTask()
         {
@@ -75,7 +74,7 @@ public class AsyncFactory
             {
                 // 远程查询操作地点
                 operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp()));
-                SpringUtils.getBean(IOperLogService.class).insertOperlog(operLog);
+                SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog);
             }
         };
     }
@@ -111,7 +110,7 @@ public class AsyncFactory
                 // 获取客户端浏览器
                 String browser = userAgent.getBrowser().getName();
                 // 封装对象
-                Logininfor logininfor = new Logininfor();
+                SysLogininfor logininfor = new SysLogininfor();
                 logininfor.setLoginName(username);
                 logininfor.setIpaddr(ip);
                 logininfor.setLoginLocation(AddressUtils.getRealAddressByIP(ip));
@@ -128,7 +127,7 @@ public class AsyncFactory
                     logininfor.setStatus(Constants.FAIL);
                 }
                 // 插入数据
-                SpringUtils.getBean(LogininforServiceImpl.class).insertLogininfor(logininfor);
+                SpringUtils.getBean(SysLogininforServiceImpl.class).insertLogininfor(logininfor);
             }
         };
     }
diff --git a/src/main/java/com/ruoyi/framework/shiro/realm/UserRealm.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/realm/UserRealm.java
similarity index 81%
rename from src/main/java/com/ruoyi/framework/shiro/realm/UserRealm.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/realm/UserRealm.java
index efdc663b..445158fb 100644
--- a/src/main/java/com/ruoyi/framework/shiro/realm/UserRealm.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/realm/UserRealm.java
@@ -2,7 +2,6 @@ package com.ruoyi.framework.shiro.realm;
 
 import java.util.HashSet;
 import java.util.Set;
-
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authc.AuthenticationException;
 import org.apache.shiro.authc.AuthenticationInfo;
@@ -20,18 +19,17 @@ import org.apache.shiro.subject.PrincipalCollection;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-
-import com.ruoyi.common.exception.user.CaptchaException;
-import com.ruoyi.common.exception.user.RoleBlockedException;
-import com.ruoyi.common.exception.user.UserBlockedException;
-import com.ruoyi.common.exception.user.UserNotExistsException;
-import com.ruoyi.common.exception.user.UserPasswordNotMatchException;
-import com.ruoyi.common.exception.user.UserPasswordRetryLimitExceedException;
-import com.ruoyi.common.utils.security.ShiroUtils;
 import com.ruoyi.framework.shiro.service.LoginService;
-import com.ruoyi.project.system.menu.service.IMenuService;
-import com.ruoyi.project.system.role.service.IRoleService;
-import com.ruoyi.project.system.user.domain.User;
+import com.ruoyi.framework.util.ShiroUtils;
+import com.ruoyi.framework.web.exception.user.CaptchaException;
+import com.ruoyi.framework.web.exception.user.RoleBlockedException;
+import com.ruoyi.framework.web.exception.user.UserBlockedException;
+import com.ruoyi.framework.web.exception.user.UserNotExistsException;
+import com.ruoyi.framework.web.exception.user.UserPasswordNotMatchException;
+import com.ruoyi.framework.web.exception.user.UserPasswordRetryLimitExceedException;
+import com.ruoyi.system.domain.SysUser;
+import com.ruoyi.system.service.ISysMenuService;
+import com.ruoyi.system.service.ISysRoleService;
 
 /**
  * 自定义Realm 处理登录 权限
@@ -43,10 +41,10 @@ public class UserRealm extends AuthorizingRealm
     private static final Logger log = LoggerFactory.getLogger(UserRealm.class);
 
     @Autowired
-    private IMenuService menuService;
+    private ISysMenuService menuService;
 
     @Autowired
-    private IRoleService roleService;
+    private ISysRoleService roleService;
 
     @Autowired
     private LoginService loginService;
@@ -57,7 +55,7 @@ public class UserRealm extends AuthorizingRealm
     @Override
     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0)
     {
-        User user = ShiroUtils.getUser();
+        SysUser user = ShiroUtils.getUser();
         // 角色列表
         Set<String> roles = new HashSet<String>();
         // 功能列表
@@ -95,7 +93,7 @@ public class UserRealm extends AuthorizingRealm
             password = new String(upToken.getPassword());
         }
 
-        User user = null;
+        SysUser user = null;
         try
         {
             user = loginService.login(username, password);
diff --git a/src/main/java/com/ruoyi/framework/shiro/service/LoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/service/LoginService.java
similarity index 81%
rename from src/main/java/com/ruoyi/framework/shiro/service/LoginService.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/service/LoginService.java
index 7af45f9b..5b48a7de 100644
--- a/src/main/java/com/ruoyi/framework/shiro/service/LoginService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/service/LoginService.java
@@ -6,20 +6,20 @@ import org.springframework.util.StringUtils;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.constant.ShiroConstants;
 import com.ruoyi.common.constant.UserConstants;
-import com.ruoyi.common.exception.user.CaptchaException;
-import com.ruoyi.common.exception.user.UserBlockedException;
-import com.ruoyi.common.exception.user.UserDeleteException;
-import com.ruoyi.common.exception.user.UserNotExistsException;
-import com.ruoyi.common.exception.user.UserPasswordNotMatchException;
+import com.ruoyi.common.enums.UserStatus;
 import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.MessageUtils;
-import com.ruoyi.common.utils.ServletUtils;
-import com.ruoyi.common.utils.security.ShiroUtils;
 import com.ruoyi.framework.manager.AsyncManager;
 import com.ruoyi.framework.manager.factory.AsyncFactory;
-import com.ruoyi.project.system.user.domain.User;
-import com.ruoyi.project.system.user.domain.UserStatus;
-import com.ruoyi.project.system.user.service.IUserService;
+import com.ruoyi.framework.util.MessageUtils;
+import com.ruoyi.framework.util.ServletUtils;
+import com.ruoyi.framework.util.ShiroUtils;
+import com.ruoyi.framework.web.exception.user.CaptchaException;
+import com.ruoyi.framework.web.exception.user.UserBlockedException;
+import com.ruoyi.framework.web.exception.user.UserDeleteException;
+import com.ruoyi.framework.web.exception.user.UserNotExistsException;
+import com.ruoyi.framework.web.exception.user.UserPasswordNotMatchException;
+import com.ruoyi.system.domain.SysUser;
+import com.ruoyi.system.service.ISysUserService;
 
 /**
  * 登录校验方法
@@ -33,12 +33,12 @@ public class LoginService
     private PasswordService passwordService;
 
     @Autowired
-    private IUserService userService;
+    private ISysUserService userService;
 
     /**
      * 登录
      */
-    public User login(String username, String password)
+    public SysUser login(String username, String password)
     {
         // 验证码校验
         if (!StringUtils.isEmpty(ServletUtils.getRequest().getAttribute(ShiroConstants.CURRENT_CAPTCHA)))
@@ -69,7 +69,7 @@ public class LoginService
         }
 
         // 查询用户信息
-        User user = userService.selectUserByLoginName(username);
+        SysUser user = userService.selectUserByLoginName(username);
 
         if (user == null && maybeMobilePhoneNumber(username))
         {
@@ -127,7 +127,7 @@ public class LoginService
     /**
      * 记录登录信息
      */
-    public void recordLoginInfo(User user)
+    public void recordLoginInfo(SysUser user)
     {
         user.setLoginIp(ShiroUtils.getIp());
         user.setLoginDate(DateUtils.getNowDate());
diff --git a/src/main/java/com/ruoyi/framework/shiro/service/PasswordService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/service/PasswordService.java
similarity index 85%
rename from src/main/java/com/ruoyi/framework/shiro/service/PasswordService.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/service/PasswordService.java
index 3e18435e..9e065386 100644
--- a/src/main/java/com/ruoyi/framework/shiro/service/PasswordService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/service/PasswordService.java
@@ -9,12 +9,12 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import com.ruoyi.common.constant.Constants;
-import com.ruoyi.common.exception.user.UserPasswordNotMatchException;
-import com.ruoyi.common.exception.user.UserPasswordRetryLimitExceedException;
-import com.ruoyi.common.utils.MessageUtils;
 import com.ruoyi.framework.manager.AsyncManager;
 import com.ruoyi.framework.manager.factory.AsyncFactory;
-import com.ruoyi.project.system.user.domain.User;
+import com.ruoyi.framework.util.MessageUtils;
+import com.ruoyi.framework.web.exception.user.UserPasswordNotMatchException;
+import com.ruoyi.framework.web.exception.user.UserPasswordRetryLimitExceedException;
+import com.ruoyi.system.domain.SysUser;
 
 /**
  * 登录密码方法
@@ -38,7 +38,7 @@ public class PasswordService
         loginRecordCache = cacheManager.getCache("loginRecordCache");
     }
 
-    public void validate(User user, String password)
+    public void validate(SysUser user, String password)
     {
         String loginName = user.getLoginName();
 
@@ -67,7 +67,7 @@ public class PasswordService
         }
     }
 
-    public boolean matches(User user, String newPassword)
+    public boolean matches(SysUser user, String newPassword)
     {
         return user.getPassword().equals(encryptPassword(user.getLoginName(), newPassword, user.getSalt()));
     }
diff --git a/src/main/java/com/ruoyi/project/monitor/online/domain/OnlineSession.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/session/OnlineSession.java
similarity index 81%
rename from src/main/java/com/ruoyi/project/monitor/online/domain/OnlineSession.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/session/OnlineSession.java
index 6ebe279f..b840d371 100644
--- a/src/main/java/com/ruoyi/project/monitor/online/domain/OnlineSession.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/session/OnlineSession.java
@@ -1,6 +1,7 @@
-package com.ruoyi.project.monitor.online.domain;
+package com.ruoyi.framework.shiro.session;
 
 import org.apache.shiro.session.mgt.SimpleSession;
+import com.ruoyi.common.enums.OnlineStatus;
 
 /**
  * 在线用户会话属性
@@ -133,21 +134,4 @@ public class OnlineSession extends SimpleSession
     {
         return super.removeAttribute(key);
     }
-
-    public static enum OnlineStatus
-    {
-        /** 用户状态 */
-        on_line("在线"), off_line("离线");
-        private final String info;
-
-        private OnlineStatus(String info)
-        {
-            this.info = info;
-        }
-
-        public String getInfo()
-        {
-            return info;
-        }
-    }
 }
diff --git a/src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionDAO.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionDAO.java
similarity index 82%
rename from src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionDAO.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionDAO.java
index 181a7aed..d7d3039e 100644
--- a/src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionDAO.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionDAO.java
@@ -6,11 +6,11 @@ import org.apache.shiro.session.Session;
 import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import com.ruoyi.common.enums.OnlineStatus;
 import com.ruoyi.framework.manager.AsyncManager;
 import com.ruoyi.framework.manager.factory.AsyncFactory;
-import com.ruoyi.project.monitor.online.domain.OnlineSession;
-import com.ruoyi.project.monitor.online.domain.UserOnline;
-import com.ruoyi.project.monitor.online.service.IUserOnlineService;
+import com.ruoyi.system.domain.SysUserOnline;
+import com.ruoyi.system.service.impl.SysUserOnlineServiceImpl;
 
 /**
  * 针对自定义的ShiroSession的db操作
@@ -31,10 +31,7 @@ public class OnlineSessionDAO extends EnterpriseCacheSessionDAO
     private static final String LAST_SYNC_DB_TIMESTAMP = OnlineSessionDAO.class.getName() + "LAST_SYNC_DB_TIMESTAMP";
 
     @Autowired
-    private IUserOnlineService onlineService;
-
-    @Autowired
-    private OnlineSessionFactory onlineSessionFactory;
+    private SysUserOnlineServiceImpl onlineService;
 
     public OnlineSessionDAO()
     {
@@ -55,12 +52,12 @@ public class OnlineSessionDAO extends EnterpriseCacheSessionDAO
     @Override
     protected Session doReadSession(Serializable sessionId)
     {
-        UserOnline userOnline = onlineService.selectOnlineById(String.valueOf(sessionId));
+        SysUserOnline userOnline = onlineService.selectOnlineById(String.valueOf(sessionId));
         if (userOnline == null)
         {
             return null;
         }
-        return onlineSessionFactory.createSession(userOnline);
+        return super.doReadSession(sessionId);
     }
 
     /**
@@ -111,7 +108,7 @@ public class OnlineSessionDAO extends EnterpriseCacheSessionDAO
         {
             return;
         }
-        onlineSession.setStatus(OnlineSession.OnlineStatus.off_line);
+        onlineSession.setStatus(OnlineStatus.off_line);
         onlineService.deleteOnlineById(String.valueOf(onlineSession.getId()));
     }
 }
diff --git a/src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionFactory.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionFactory.java
similarity index 72%
rename from src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionFactory.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionFactory.java
index ed97c82a..aed92470 100644
--- a/src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionFactory.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/session/OnlineSessionFactory.java
@@ -6,11 +6,8 @@ import org.apache.shiro.session.mgt.SessionContext;
 import org.apache.shiro.session.mgt.SessionFactory;
 import org.apache.shiro.web.session.mgt.WebSessionContext;
 import org.springframework.stereotype.Component;
-import com.ruoyi.common.utils.ServletUtils;
 import com.ruoyi.common.utils.IpUtils;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.project.monitor.online.domain.OnlineSession;
-import com.ruoyi.project.monitor.online.domain.UserOnline;
+import com.ruoyi.framework.util.ServletUtils;
 import eu.bitwalker.useragentutils.UserAgent;
 
 /**
@@ -21,16 +18,6 @@ import eu.bitwalker.useragentutils.UserAgent;
 @Component
 public class OnlineSessionFactory implements SessionFactory
 {
-    public Session createSession(UserOnline userOnline)
-    {
-        OnlineSession onlineSession = userOnline.getSession();
-        if (StringUtils.isNotNull(onlineSession) && onlineSession.getId() == null)
-        {
-            onlineSession.setId(userOnline.getSessionId());
-        }
-        return userOnline.getSession();
-    }
-
     @Override
     public Session createSession(SessionContext initData)
     {
diff --git a/src/main/java/com/ruoyi/framework/shiro/web/filter/LogoutFilter.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/LogoutFilter.java
similarity index 89%
rename from src/main/java/com/ruoyi/framework/shiro/web/filter/LogoutFilter.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/LogoutFilter.java
index 187f3c84..58041857 100644
--- a/src/main/java/com/ruoyi/framework/shiro/web/filter/LogoutFilter.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/LogoutFilter.java
@@ -7,12 +7,12 @@ import org.apache.shiro.subject.Subject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import com.ruoyi.common.constant.Constants;
-import com.ruoyi.common.utils.MessageUtils;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.security.ShiroUtils;
 import com.ruoyi.framework.manager.AsyncManager;
 import com.ruoyi.framework.manager.factory.AsyncFactory;
-import com.ruoyi.project.system.user.domain.User;
+import com.ruoyi.framework.util.MessageUtils;
+import com.ruoyi.framework.util.ShiroUtils;
+import com.ruoyi.system.domain.SysUser;
 
 /**
  * 退出过滤器
@@ -47,7 +47,7 @@ public class LogoutFilter extends org.apache.shiro.web.filter.authc.LogoutFilter
             String redirectUrl = getRedirectUrl(request, response, subject);
             try
             {
-                User user = ShiroUtils.getUser();
+                SysUser user = ShiroUtils.getUser();
                 if (StringUtils.isNotNull(user))
                 {
                     String loginName = user.getLoginName();
diff --git a/src/main/java/com/ruoyi/framework/shiro/web/filter/captcha/CaptchaValidateFilter.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/captcha/CaptchaValidateFilter.java
similarity index 95%
rename from src/main/java/com/ruoyi/framework/shiro/web/filter/captcha/CaptchaValidateFilter.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/captcha/CaptchaValidateFilter.java
index 3b4bdbf8..743d2793 100644
--- a/src/main/java/com/ruoyi/framework/shiro/web/filter/captcha/CaptchaValidateFilter.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/captcha/CaptchaValidateFilter.java
@@ -7,7 +7,7 @@ import org.apache.shiro.web.filter.AccessControlFilter;
 import com.google.code.kaptcha.Constants;
 import com.ruoyi.common.constant.ShiroConstants;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.security.ShiroUtils;
+import com.ruoyi.framework.util.ShiroUtils;
 
 /**
  * 验证码过滤器
diff --git a/src/main/java/com/ruoyi/framework/shiro/web/filter/online/OnlineSessionFilter.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/online/OnlineSessionFilter.java
similarity index 88%
rename from src/main/java/com/ruoyi/framework/shiro/web/filter/online/OnlineSessionFilter.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/online/OnlineSessionFilter.java
index dc5a8f6d..e15f91ff 100644
--- a/src/main/java/com/ruoyi/framework/shiro/web/filter/online/OnlineSessionFilter.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/online/OnlineSessionFilter.java
@@ -10,10 +10,11 @@ import org.apache.shiro.web.util.WebUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import com.ruoyi.common.constant.ShiroConstants;
-import com.ruoyi.common.utils.security.ShiroUtils;
+import com.ruoyi.common.enums.OnlineStatus;
+import com.ruoyi.framework.shiro.session.OnlineSession;
 import com.ruoyi.framework.shiro.session.OnlineSessionDAO;
-import com.ruoyi.project.monitor.online.domain.OnlineSession;
-import com.ruoyi.project.system.user.domain.User;
+import com.ruoyi.framework.util.ShiroUtils;
+import com.ruoyi.system.domain.SysUser;
 
 /**
  * 自定义访问控制
@@ -52,7 +53,7 @@ public class OnlineSessionFilter extends AccessControlFilter
             boolean isGuest = onlineSession.getUserId() == null || onlineSession.getUserId() == 0L;
             if (isGuest == true)
             {
-                User user = ShiroUtils.getUser();
+                SysUser user = ShiroUtils.getUser();
                 if (user != null)
                 {
                     onlineSession.setUserId(user.getUserId());
@@ -62,7 +63,7 @@ public class OnlineSessionFilter extends AccessControlFilter
                 }
             }
 
-            if (onlineSession.getStatus() == OnlineSession.OnlineStatus.off_line)
+            if (onlineSession.getStatus() == OnlineStatus.off_line)
             {
                 return false;
             }
diff --git a/src/main/java/com/ruoyi/framework/shiro/web/filter/sync/SyncOnlineSessionFilter.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/sync/SyncOnlineSessionFilter.java
similarity index 92%
rename from src/main/java/com/ruoyi/framework/shiro/web/filter/sync/SyncOnlineSessionFilter.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/sync/SyncOnlineSessionFilter.java
index 05a74c84..0c117c1f 100644
--- a/src/main/java/com/ruoyi/framework/shiro/web/filter/sync/SyncOnlineSessionFilter.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/sync/SyncOnlineSessionFilter.java
@@ -5,8 +5,8 @@ import javax.servlet.ServletResponse;
 import org.apache.shiro.web.filter.PathMatchingFilter;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.ruoyi.common.constant.ShiroConstants;
+import com.ruoyi.framework.shiro.session.OnlineSession;
 import com.ruoyi.framework.shiro.session.OnlineSessionDAO;
-import com.ruoyi.project.monitor.online.domain.OnlineSession;
 
 /**
  * 同步Session数据到Db
diff --git a/src/main/java/com/ruoyi/framework/shiro/web/session/OnlineWebSessionManager.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/session/OnlineWebSessionManager.java
similarity index 87%
rename from src/main/java/com/ruoyi/framework/shiro/web/session/OnlineWebSessionManager.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/session/OnlineWebSessionManager.java
index 72d9e576..c79d6ac5 100644
--- a/src/main/java/com/ruoyi/framework/shiro/web/session/OnlineWebSessionManager.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/session/OnlineWebSessionManager.java
@@ -14,10 +14,10 @@ import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import com.ruoyi.common.constant.ShiroConstants;
-import com.ruoyi.common.utils.spring.SpringUtils;
-import com.ruoyi.project.monitor.online.domain.OnlineSession;
-import com.ruoyi.project.monitor.online.domain.UserOnline;
-import com.ruoyi.project.monitor.online.service.UserOnlineServiceImpl;
+import com.ruoyi.framework.shiro.session.OnlineSession;
+import com.ruoyi.framework.util.SpringUtils;
+import com.ruoyi.system.domain.SysUserOnline;
+import com.ruoyi.system.service.impl.SysUserOnlineServiceImpl;
 
 /**
  * 主要是在此如果会话的属性修改了 就标识下其修改了 然后方便 OnlineSessionDao同步
@@ -90,11 +90,11 @@ public class OnlineWebSessionManager extends DefaultWebSessionManager
 
         int timeout = (int) this.getGlobalSessionTimeout();
         Date expiredDate = DateUtils.addMilliseconds(new Date(), 0 - timeout);
-        UserOnlineServiceImpl userOnlineService = SpringUtils.getBean(UserOnlineServiceImpl.class);
-        List<UserOnline> userOnlineList = userOnlineService.selectOnlineByExpired(expiredDate);
+        SysUserOnlineServiceImpl userOnlineService = SpringUtils.getBean(SysUserOnlineServiceImpl.class);
+        List<SysUserOnline> userOnlineList = userOnlineService.selectOnlineByExpired(expiredDate);
         // 批量过期删除
         List<String> needOfflineIdList = new ArrayList<String>();
-        for (UserOnline userOnline : userOnlineList)
+        for (SysUserOnline userOnline : userOnlineList)
         {
             try
             {
diff --git a/src/main/java/com/ruoyi/framework/shiro/web/session/SpringSessionValidationScheduler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/session/SpringSessionValidationScheduler.java
similarity index 100%
rename from src/main/java/com/ruoyi/framework/shiro/web/session/SpringSessionValidationScheduler.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/session/SpringSessionValidationScheduler.java
diff --git a/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/FileUploadUtils.java
similarity index 90%
rename from src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/util/FileUploadUtils.java
index 96fd3ee1..6c1927f0 100644
--- a/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/FileUploadUtils.java
@@ -1,12 +1,12 @@
-package com.ruoyi.common.utils.file;
+package com.ruoyi.framework.util;
 
 import java.io.File;
 import java.io.IOException;
-import org.apache.shiro.crypto.hash.Md5Hash;
 import org.apache.tomcat.util.http.fileupload.FileUploadBase.FileSizeLimitExceededException;
 import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.common.config.Global;
 import com.ruoyi.common.exception.file.FileNameLengthLimitExceededException;
-import com.ruoyi.framework.config.RuoYiConfig;
+import com.ruoyi.common.utils.Md5Utils;
 
 /**
  * 文件上传工具类
@@ -23,7 +23,7 @@ public class FileUploadUtils
     /**
      * 默认上传的地址
      */
-    private static String defaultBaseDir = RuoYiConfig.getProfile();
+    private static String defaultBaseDir = Global.getProfile();
 
     /**
      * 默认的文件名最大长度
@@ -139,7 +139,7 @@ public class FileUploadUtils
     private static final String encodingFilename(String filename, String extension)
     {
         filename = filename.replace("_", " ");
-        filename = new Md5Hash(filename + System.nanoTime() + counter++).toHex().toString() + extension;
+        filename = Md5Utils.hash(filename + System.nanoTime() + counter++) + extension;
         return filename;
     }
 
diff --git a/src/main/java/com/ruoyi/common/utils/LogUtils.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/LogUtils.java
similarity index 90%
rename from src/main/java/com/ruoyi/common/utils/LogUtils.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/util/LogUtils.java
index 3648ee3b..96a38eb5 100644
--- a/src/main/java/com/ruoyi/common/utils/LogUtils.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/LogUtils.java
@@ -1,13 +1,14 @@
-package com.ruoyi.common.utils;
+package com.ruoyi.framework.util;
 
-import com.alibaba.fastjson.JSON;
-import org.apache.shiro.SecurityUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import javax.servlet.http.HttpServletRequest;
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import org.apache.shiro.SecurityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.ruoyi.common.json.JSON;
+import com.ruoyi.common.utils.IpUtils;
 
 /**
  * 处理并记录日志文件
@@ -23,8 +24,9 @@ public class LogUtils
      * 记录访问日志 [username][jsessionid][ip][accept][UserAgent][url][params][Referer]
      *
      * @param request
+     * @throws Exception
      */
-    public static void logAccess(HttpServletRequest request)
+    public static void logAccess(HttpServletRequest request) throws Exception
     {
         String username = getUsername();
         String jsessionId = request.getRequestedSessionId();
@@ -111,10 +113,10 @@ public class LogUtils
         return "[" + msg.toString() + "]";
     }
 
-    protected static String getParams(HttpServletRequest request)
+    protected static String getParams(HttpServletRequest request) throws Exception
     {
         Map<String, String[]> params = request.getParameterMap();
-        return JSON.toJSONString(params);
+        return JSON.marshal(params);
     }
 
     protected static String getUsername()
diff --git a/src/main/java/com/ruoyi/common/utils/MessageUtils.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/MessageUtils.java
similarity index 82%
rename from src/main/java/com/ruoyi/common/utils/MessageUtils.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/util/MessageUtils.java
index 879421ba..b787e1bd 100644
--- a/src/main/java/com/ruoyi/common/utils/MessageUtils.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/MessageUtils.java
@@ -1,7 +1,6 @@
-package com.ruoyi.common.utils;
+package com.ruoyi.framework.util;
 
 import org.springframework.context.MessageSource;
-import com.ruoyi.common.utils.spring.SpringUtils;
 
 /**
  * 获取i18n资源文件
diff --git a/src/main/java/com/ruoyi/common/utils/security/PermissionUtils.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/PermissionUtils.java
similarity index 85%
rename from src/main/java/com/ruoyi/common/utils/security/PermissionUtils.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/util/PermissionUtils.java
index 823217ab..ddf222b2 100644
--- a/src/main/java/com/ruoyi/common/utils/security/PermissionUtils.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/PermissionUtils.java
@@ -1,46 +1,46 @@
-package com.ruoyi.common.utils.security;
-
-import org.apache.commons.lang3.StringUtils;
-import com.ruoyi.common.constant.PermissionConstants;
-import com.ruoyi.common.utils.MessageUtils;
-
-/**
- * permission 工具类
- * 
- * @author ruoyi
- */
-public class PermissionUtils
-{
-    /**
-     * 权限错误消息提醒
-     * 
-     * @param errorMsg 错误信息
-     * @return
-     */
-    public static String getMsg(String permissionsStr)
-    {
-        String permission = StringUtils.substringBetween(permissionsStr, "[", "]");
-        String msg = MessageUtils.message("no.view.permission", permission);
-        if (StringUtils.endsWithIgnoreCase(permission, PermissionConstants.ADD_PERMISSION))
-        {
-            msg = MessageUtils.message("no.create.permission", permission);
-        }
-        else if (StringUtils.endsWithIgnoreCase(permission, PermissionConstants.EDIT_PERMISSION))
-        {
-            msg = MessageUtils.message("no.update.permission", permission);
-        }
-        else if (StringUtils.endsWithIgnoreCase(permission, PermissionConstants.REMOVE_PERMISSION))
-        {
-            msg = MessageUtils.message("no.delete.permission", permission);
-        }
-        else if (StringUtils.endsWithIgnoreCase(permission, PermissionConstants.EXPORT_PERMISSION))
-        {
-            msg = MessageUtils.message("no.export.permission", permission);
-        }
-        else if (StringUtils.endsWithAny(permission, new String[] { PermissionConstants.VIEW_PERMISSION, PermissionConstants.LIST_PERMISSION }))
-        {
-            msg = MessageUtils.message("no.view.permission", permission);
-        }
-        return msg;
-    }
-}
+package com.ruoyi.framework.util;
+
+import org.apache.commons.lang3.StringUtils;
+import com.ruoyi.common.constant.PermissionConstants;
+
+/**
+ * permission 工具类
+ * 
+ * @author ruoyi
+ */
+public class PermissionUtils
+{
+    /**
+     * 权限错误消息提醒
+     * 
+     * @param errorMsg 错误信息
+     * @return
+     */
+    public static String getMsg(String permissionsStr)
+    {
+        String permission = StringUtils.substringBetween(permissionsStr, "[", "]");
+        String msg = MessageUtils.message("no.view.permission", permission);
+        if (StringUtils.endsWithIgnoreCase(permission, PermissionConstants.ADD_PERMISSION))
+        {
+            msg = MessageUtils.message("no.create.permission", permission);
+        }
+        else if (StringUtils.endsWithIgnoreCase(permission, PermissionConstants.EDIT_PERMISSION))
+        {
+            msg = MessageUtils.message("no.update.permission", permission);
+        }
+        else if (StringUtils.endsWithIgnoreCase(permission, PermissionConstants.REMOVE_PERMISSION))
+        {
+            msg = MessageUtils.message("no.delete.permission", permission);
+        }
+        else if (StringUtils.endsWithIgnoreCase(permission, PermissionConstants.EXPORT_PERMISSION))
+        {
+            msg = MessageUtils.message("no.export.permission", permission);
+        }
+        else if (StringUtils.endsWithAny(permission,
+                new String[] { PermissionConstants.VIEW_PERMISSION, PermissionConstants.LIST_PERMISSION }))
+        {
+            msg = MessageUtils.message("no.view.permission", permission);
+        }
+        return msg;
+    }
+}
diff --git a/src/main/java/com/ruoyi/common/utils/ServletUtils.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/ServletUtils.java
similarity index 93%
rename from src/main/java/com/ruoyi/common/utils/ServletUtils.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/util/ServletUtils.java
index f4b96af4..4f56a6fd 100644
--- a/src/main/java/com/ruoyi/common/utils/ServletUtils.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/ServletUtils.java
@@ -1,4 +1,4 @@
-package com.ruoyi.common.utils;
+package com.ruoyi.framework.util;
 
 import java.io.IOException;
 import javax.servlet.http.HttpServletRequest;
@@ -8,6 +8,7 @@ import org.springframework.web.context.request.RequestAttributes;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 import com.ruoyi.common.support.Convert;
+import com.ruoyi.common.utils.StringUtils;
 
 /**
  * 客户端工具类
diff --git a/src/main/java/com/ruoyi/common/utils/security/ShiroUtils.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/ShiroUtils.java
similarity index 74%
rename from src/main/java/com/ruoyi/common/utils/security/ShiroUtils.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/util/ShiroUtils.java
index 74a0a99d..fd069586 100644
--- a/src/main/java/com/ruoyi/common/utils/security/ShiroUtils.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/ShiroUtils.java
@@ -1,6 +1,7 @@
-package com.ruoyi.common.utils.security;
+package com.ruoyi.framework.util;
 
 import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.crypto.SecureRandomNumberGenerator;
 import org.apache.shiro.mgt.RealmSecurityManager;
 import org.apache.shiro.session.Session;
 import org.apache.shiro.subject.PrincipalCollection;
@@ -9,7 +10,7 @@ import org.apache.shiro.subject.Subject;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.framework.shiro.realm.UserRealm;
-import com.ruoyi.project.system.user.domain.User;
+import com.ruoyi.system.domain.SysUser;
 
 /**
  * shiro 工具类
@@ -33,19 +34,19 @@ public class ShiroUtils
         getSubjct().logout();
     }
 
-    public static User getUser()
+    public static SysUser getUser()
     {
-        User user = null;
+        SysUser user = null;
         Object obj = getSubjct().getPrincipal();
         if (StringUtils.isNotNull(obj))
         {
-            user = new User();
+            user = new SysUser();
             BeanUtils.copyBeanProp(user, obj);
         }
         return user;
     }
 
-    public static void setUser(User user)
+    public static void setUser(SysUser user)
     {
         Subject subject = getSubjct();
         PrincipalCollection principalCollection = subject.getPrincipals();
@@ -81,4 +82,15 @@ public class ShiroUtils
     {
         return String.valueOf(getSubjct().getSession().getId());
     }
+
+    /**
+     * 生成随机盐
+     */
+    public static String randomSalt()
+    {
+        // 一个Byte占两个字节,此处生成的3字节,字符串长度为6
+        SecureRandomNumberGenerator secureRandom = new SecureRandomNumberGenerator();
+        String hex = secureRandom.nextBytes(3).toHex();
+        return hex;
+    }
 }
diff --git a/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/SpringUtils.java
similarity index 95%
rename from src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/util/SpringUtils.java
index daf253ec..99b0f05b 100644
--- a/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/util/SpringUtils.java
@@ -1,4 +1,4 @@
-package com.ruoyi.common.utils.spring;
+package com.ruoyi.framework.util;
 
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.NoSuchBeanDefinitionException;
diff --git a/src/main/java/com/ruoyi/framework/web/exception/DefaultExceptionHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/DefaultExceptionHandler.java
similarity index 91%
rename from src/main/java/com/ruoyi/framework/web/exception/DefaultExceptionHandler.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/DefaultExceptionHandler.java
index e0ee48a7..2dadddf2 100644
--- a/src/main/java/com/ruoyi/framework/web/exception/DefaultExceptionHandler.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/DefaultExceptionHandler.java
@@ -6,9 +6,9 @@ import org.slf4j.LoggerFactory;
 import org.springframework.web.HttpRequestMethodNotSupportedException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
+import com.ruoyi.common.base.AjaxResult;
 import com.ruoyi.common.exception.DemoModeException;
-import com.ruoyi.common.utils.security.PermissionUtils;
-import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.framework.util.PermissionUtils;
 
 /**
  * 自定义异常处理器
@@ -68,5 +68,4 @@ public class DefaultExceptionHandler
     {
         return AjaxResult.error("演示模式,不允许操作");
     }
-
 }
diff --git a/src/main/java/com/ruoyi/common/exception/base/BaseException.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/base/BaseException.java
similarity index 81%
rename from src/main/java/com/ruoyi/common/exception/base/BaseException.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/base/BaseException.java
index 452a54be..a1e33f6f 100644
--- a/src/main/java/com/ruoyi/common/exception/base/BaseException.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/base/BaseException.java
@@ -1,7 +1,7 @@
-package com.ruoyi.common.exception.base;
+package com.ruoyi.framework.web.exception.base;
 
-import org.springframework.util.StringUtils;
-import com.ruoyi.common.utils.MessageUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.util.MessageUtils;
 
 /**
  * 基础异常
@@ -94,10 +94,4 @@ public class BaseException extends RuntimeException
     {
         return defaultMessage;
     }
-
-    @Override
-    public String toString()
-    {
-        return this.getClass() + "{" + "module='" + module + '\'' + ", message='" + getMessage() + '\'' + '}';
-    }
 }
diff --git a/src/main/java/com/ruoyi/common/exception/user/CaptchaException.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/CaptchaException.java
similarity index 79%
rename from src/main/java/com/ruoyi/common/exception/user/CaptchaException.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/CaptchaException.java
index e3334ae3..dcd4e523 100644
--- a/src/main/java/com/ruoyi/common/exception/user/CaptchaException.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/CaptchaException.java
@@ -1,4 +1,4 @@
-package com.ruoyi.common.exception.user;
+package com.ruoyi.framework.web.exception.user;
 
 /**
  * 验证码错误异常类
diff --git a/src/main/java/com/ruoyi/common/exception/user/RoleBlockedException.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/RoleBlockedException.java
similarity index 81%
rename from src/main/java/com/ruoyi/common/exception/user/RoleBlockedException.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/RoleBlockedException.java
index f892957c..23f57140 100644
--- a/src/main/java/com/ruoyi/common/exception/user/RoleBlockedException.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/RoleBlockedException.java
@@ -1,4 +1,4 @@
-package com.ruoyi.common.exception.user;
+package com.ruoyi.framework.web.exception.user;
 
 /**
  * 角色锁定异常类
@@ -13,5 +13,4 @@ public class RoleBlockedException extends UserException
     {
         super("role.blocked", new Object[] { reason });
     }
-
 }
diff --git a/src/main/java/com/ruoyi/common/exception/user/UserBlockedException.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserBlockedException.java
similarity index 81%
rename from src/main/java/com/ruoyi/common/exception/user/UserBlockedException.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserBlockedException.java
index 20a4c267..85539899 100644
--- a/src/main/java/com/ruoyi/common/exception/user/UserBlockedException.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserBlockedException.java
@@ -1,4 +1,4 @@
-package com.ruoyi.common.exception.user;
+package com.ruoyi.framework.web.exception.user;
 
 /**
  * 用户锁定异常类
diff --git a/src/main/java/com/ruoyi/common/exception/user/UserDeleteException.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserDeleteException.java
similarity index 80%
rename from src/main/java/com/ruoyi/common/exception/user/UserDeleteException.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserDeleteException.java
index cf072422..c1839375 100644
--- a/src/main/java/com/ruoyi/common/exception/user/UserDeleteException.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserDeleteException.java
@@ -1,4 +1,4 @@
-package com.ruoyi.common.exception.user;
+package com.ruoyi.framework.web.exception.user;
 
 /**
  * 用户账号已被删除
diff --git a/src/main/java/com/ruoyi/common/exception/user/UserException.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserException.java
similarity index 67%
rename from src/main/java/com/ruoyi/common/exception/user/UserException.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserException.java
index bdfec80e..a1f4fada 100644
--- a/src/main/java/com/ruoyi/common/exception/user/UserException.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserException.java
@@ -1,6 +1,6 @@
-package com.ruoyi.common.exception.user;
+package com.ruoyi.framework.web.exception.user;
 
-import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.framework.web.exception.base.BaseException;
 
 /**
  * 用户信息异常类
@@ -15,5 +15,4 @@ public class UserException extends BaseException
     {
         super("user", code, args, null);
     }
-
 }
diff --git a/src/main/java/com/ruoyi/common/exception/user/UserNotExistsException.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserNotExistsException.java
similarity index 80%
rename from src/main/java/com/ruoyi/common/exception/user/UserNotExistsException.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserNotExistsException.java
index ed4bea3a..8e9e7511 100644
--- a/src/main/java/com/ruoyi/common/exception/user/UserNotExistsException.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserNotExistsException.java
@@ -1,4 +1,4 @@
-package com.ruoyi.common.exception.user;
+package com.ruoyi.framework.web.exception.user;
 
 /**
  * 用户不存在异常类
diff --git a/src/main/java/com/ruoyi/common/exception/user/UserPasswordNotMatchException.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserPasswordNotMatchException.java
similarity index 82%
rename from src/main/java/com/ruoyi/common/exception/user/UserPasswordNotMatchException.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserPasswordNotMatchException.java
index 71449e29..11f1df73 100644
--- a/src/main/java/com/ruoyi/common/exception/user/UserPasswordNotMatchException.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserPasswordNotMatchException.java
@@ -1,4 +1,4 @@
-package com.ruoyi.common.exception.user;
+package com.ruoyi.framework.web.exception.user;
 
 /**
  * 用户密码不正确或不符合规范异常类
diff --git a/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitCountException.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserPasswordRetryLimitCountException.java
similarity index 84%
rename from src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitCountException.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserPasswordRetryLimitCountException.java
index 4222135f..65c95cf1 100644
--- a/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitCountException.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserPasswordRetryLimitCountException.java
@@ -1,4 +1,4 @@
-package com.ruoyi.common.exception.user;
+package com.ruoyi.framework.web.exception.user;
 
 /**
  * 用户错误记数异常类
diff --git a/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitExceedException.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserPasswordRetryLimitExceedException.java
similarity index 85%
rename from src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitExceedException.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserPasswordRetryLimitExceedException.java
index b48c4065..ad0ecf32 100644
--- a/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitExceedException.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/user/UserPasswordRetryLimitExceedException.java
@@ -1,4 +1,4 @@
-package com.ruoyi.common.exception.user;
+package com.ruoyi.framework.web.exception.user;
 
 /**
  * 用户错误最大次数异常类
diff --git a/src/main/java/com/ruoyi/framework/web/page/PageDomain.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/page/PageDomain.java
similarity index 94%
rename from src/main/java/com/ruoyi/framework/web/page/PageDomain.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/web/page/PageDomain.java
index 3ea659b5..bf342a32 100644
--- a/src/main/java/com/ruoyi/framework/web/page/PageDomain.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/page/PageDomain.java
@@ -11,11 +11,14 @@ public class PageDomain
 {
     /** 当前记录起始索引 */
     private Integer pageNum;
+
     /** 每页显示记录数 */
     private Integer pageSize;
+
     /** 排序列 */
     private String orderByColumn;
     /** 排序的方向 "desc" 或者 "asc". */
+
     private String isAsc;
 
     public String getOrderBy()
@@ -66,5 +69,4 @@ public class PageDomain
     {
         this.isAsc = isAsc;
     }
-
 }
diff --git a/src/main/java/com/ruoyi/framework/web/page/TableDataInfo.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/page/TableDataInfo.java
similarity index 100%
rename from src/main/java/com/ruoyi/framework/web/page/TableDataInfo.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/web/page/TableDataInfo.java
diff --git a/src/main/java/com/ruoyi/framework/web/page/TableSupport.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/page/TableSupport.java
similarity index 90%
rename from src/main/java/com/ruoyi/framework/web/page/TableSupport.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/web/page/TableSupport.java
index b7530a31..375ccdbb 100644
--- a/src/main/java/com/ruoyi/framework/web/page/TableSupport.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/page/TableSupport.java
@@ -1,7 +1,7 @@
 package com.ruoyi.framework.web.page;
 
-import com.ruoyi.common.utils.ServletUtils;
 import com.ruoyi.common.constant.Constants;
+import com.ruoyi.framework.util.ServletUtils;
 
 /**
  * 表格数据处理
@@ -27,5 +27,4 @@ public class TableSupport
     {
         return getPageDomain();
     }
-
 }
diff --git a/src/main/java/com/ruoyi/framework/web/service/ConfigService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/ConfigService.java
similarity index 80%
rename from src/main/java/com/ruoyi/framework/web/service/ConfigService.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/ConfigService.java
index 2b69ee0d..5ee1b3d8 100644
--- a/src/main/java/com/ruoyi/framework/web/service/ConfigService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/ConfigService.java
@@ -2,7 +2,7 @@ package com.ruoyi.framework.web.service;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.ruoyi.project.system.config.service.IConfigService;
+import com.ruoyi.system.service.ISysConfigService;
 
 /**
  * RuoYi首创 html调用 thymeleaf 实现参数管理
@@ -13,7 +13,7 @@ import com.ruoyi.project.system.config.service.IConfigService;
 public class ConfigService
 {
     @Autowired
-    private IConfigService configService;
+    private ISysConfigService configService;
 
     /**
      * 根据键名查询参数配置信息
@@ -25,5 +25,4 @@ public class ConfigService
     {
         return configService.selectConfigByKey(configKey);
     }
-
 }
diff --git a/src/main/java/com/ruoyi/framework/web/service/DictService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/DictService.java
similarity index 77%
rename from src/main/java/com/ruoyi/framework/web/service/DictService.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/DictService.java
index c917fc73..64e7c8a0 100644
--- a/src/main/java/com/ruoyi/framework/web/service/DictService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/DictService.java
@@ -3,8 +3,8 @@ package com.ruoyi.framework.web.service;
 import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.ruoyi.project.system.dict.domain.DictData;
-import com.ruoyi.project.system.dict.service.IDictDataService;
+import com.ruoyi.system.domain.SysDictData;
+import com.ruoyi.system.service.ISysDictDataService;
 
 /**
  * RuoYi首创 html调用 thymeleaf 实现字典读取
@@ -15,7 +15,7 @@ import com.ruoyi.project.system.dict.service.IDictDataService;
 public class DictService
 {
     @Autowired
-    private IDictDataService dictDataService;
+    private ISysDictDataService dictDataService;
 
     /**
      * 根据字典类型查询字典数据信息
@@ -23,7 +23,7 @@ public class DictService
      * @param dictType 字典类型
      * @return 参数键值
      */
-    public List<DictData> getType(String dictType)
+    public List<SysDictData> getType(String dictType)
     {
         return dictDataService.selectDictDataByType(dictType);
     }
diff --git a/src/main/java/com/ruoyi/framework/web/service/PermissionService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/PermissionService.java
similarity index 95%
rename from src/main/java/com/ruoyi/framework/web/service/PermissionService.java
rename to ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/PermissionService.java
index babc40a9..da0a352d 100644
--- a/src/main/java/com/ruoyi/framework/web/service/PermissionService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/PermissionService.java
@@ -20,5 +20,4 @@ public class PermissionService
     {
         return SecurityUtils.getSubject().isPermitted(permission);
     }
-
 }
diff --git a/ruoyi-generator/pom.xml b/ruoyi-generator/pom.xml
new file mode 100644
index 00000000..7c9b25f6
--- /dev/null
+++ b/ruoyi-generator/pom.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ruoyi</artifactId>
+        <groupId>com.ruoyi</groupId>
+        <version>3.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ruoyi-generator</artifactId>
+	
+	<description>
+	    generator代码生成
+	</description>
+	
+	<properties>
+        <velocity.version>1.7</velocity.version>
+    </properties>
+
+    <dependencies>
+   
+        <!--Spring框架基本的核心工具-->
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-context-support</artifactId>
+		</dependency>
+		
+		<!--velocity代码生成使用模板 -->
+		<dependency>
+			<groupId>org.apache.velocity</groupId>
+			<artifactId>velocity</artifactId>
+			<version>${velocity.version}</version>
+		</dependency>
+		
+		<!-- 通用工具-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-common</artifactId>
+            <version>${ruoyi.version}</version>
+        </dependency>
+		
+    </dependencies>
+	
+</project>
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/project/tool/gen/domain/ColumnInfo.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/ColumnInfo.java
similarity index 92%
rename from src/main/java/com/ruoyi/project/tool/gen/domain/ColumnInfo.java
rename to ruoyi-generator/src/main/java/com/ruoyi/generator/domain/ColumnInfo.java
index 9537360f..4108af6c 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/domain/ColumnInfo.java
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/ColumnInfo.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.tool.gen.domain;
+package com.ruoyi.generator.domain;
 
 /**
  * ry数据库表列信息
diff --git a/src/main/java/com/ruoyi/project/tool/gen/domain/TableInfo.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/TableInfo.java
similarity index 79%
rename from src/main/java/com/ruoyi/project/tool/gen/domain/TableInfo.java
rename to ruoyi-generator/src/main/java/com/ruoyi/generator/domain/TableInfo.java
index aa5c9dab..ee8acc0c 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/domain/TableInfo.java
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/TableInfo.java
@@ -1,8 +1,8 @@
-package com.ruoyi.project.tool.gen.domain;
+package com.ruoyi.generator.domain;
 
 import java.util.List;
+import com.ruoyi.common.base.BaseEntity;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.framework.web.domain.BaseEntity;
 
 /**
  * ry 数据库表
@@ -12,7 +12,7 @@ import com.ruoyi.framework.web.domain.BaseEntity;
 public class TableInfo extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
-    
+
     /** 表名称 */
     private String tableName;
 
@@ -100,11 +100,4 @@ public class TableInfo extends BaseEntity
     {
         this.primaryKey = primaryKey;
     }
-
-    @Override
-    public String toString()
-    {
-        return "TableInfo [tableName=" + tableName + ", tableComment=" + tableComment + ", primaryKey=" + primaryKey
-                + ", columns=" + columns + ", className=" + className + ", classname=" + classname + "]";
-    }
 }
diff --git a/src/main/java/com/ruoyi/project/tool/gen/mapper/GenMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenMapper.java
similarity index 78%
rename from src/main/java/com/ruoyi/project/tool/gen/mapper/GenMapper.java
rename to ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenMapper.java
index 9fc4fea4..a516128a 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/mapper/GenMapper.java
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenMapper.java
@@ -1,8 +1,8 @@
-package com.ruoyi.project.tool.gen.mapper;
+package com.ruoyi.generator.mapper;
 
 import java.util.List;
-import com.ruoyi.project.tool.gen.domain.ColumnInfo;
-import com.ruoyi.project.tool.gen.domain.TableInfo;
+import com.ruoyi.generator.domain.ColumnInfo;
+import com.ruoyi.generator.domain.TableInfo;
 
 /**
  * 代码生成 数据层
diff --git a/src/main/java/com/ruoyi/project/tool/gen/service/IGenService.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenService.java
similarity index 81%
rename from src/main/java/com/ruoyi/project/tool/gen/service/IGenService.java
rename to ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenService.java
index 53bed04f..1dbf12af 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/service/IGenService.java
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenService.java
@@ -1,7 +1,7 @@
-package com.ruoyi.project.tool.gen.service;
+package com.ruoyi.generator.service;
 
 import java.util.List;
-import com.ruoyi.project.tool.gen.domain.TableInfo;
+import com.ruoyi.generator.domain.TableInfo;
 
 /**
  * 代码生成 服务层
@@ -25,7 +25,7 @@ public interface IGenService
      * @return 数据
      */
     public byte[] generatorCode(String tableName);
-    
+
     /**
      * 批量生成代码
      * 
diff --git a/src/main/java/com/ruoyi/project/tool/gen/service/GenServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenServiceImpl.java
similarity index 83%
rename from src/main/java/com/ruoyi/project/tool/gen/service/GenServiceImpl.java
rename to ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenServiceImpl.java
index 545eeaf4..682921b6 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/service/GenServiceImpl.java
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/impl/GenServiceImpl.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.tool.gen.service;
+package com.ruoyi.generator.service.impl;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -10,17 +10,19 @@ import org.apache.commons.io.IOUtils;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.Velocity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import com.ruoyi.common.config.Global;
 import com.ruoyi.common.constant.Constants;
-import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.framework.config.GenConfig;
-import com.ruoyi.project.tool.gen.domain.ColumnInfo;
-import com.ruoyi.project.tool.gen.domain.TableInfo;
-import com.ruoyi.project.tool.gen.mapper.GenMapper;
-import com.ruoyi.project.tool.gen.util.GenUtils;
-import com.ruoyi.project.tool.gen.util.VelocityInitializer;
+import com.ruoyi.generator.domain.ColumnInfo;
+import com.ruoyi.generator.domain.TableInfo;
+import com.ruoyi.generator.mapper.GenMapper;
+import com.ruoyi.generator.service.IGenService;
+import com.ruoyi.generator.util.GenUtils;
+import com.ruoyi.generator.util.VelocityInitializer;
 
 /**
  * 代码生成 服务层处理
@@ -30,6 +32,8 @@ import com.ruoyi.project.tool.gen.util.VelocityInitializer;
 @Service
 public class GenServiceImpl implements IGenService
 {
+    private static final Logger log = LoggerFactory.getLogger(GenServiceImpl.class);
+
     @Autowired
     private GenMapper genMapper;
 
@@ -106,7 +110,7 @@ public class GenServiceImpl implements IGenService
 
         VelocityInitializer.initVelocity();
 
-        String packageName = GenConfig.getPackageName();
+        String packageName = Global.getPackageName();
         String moduleName = GenUtils.getModuleName(packageName);
 
         VelocityContext context = GenUtils.getVelocityContext(table);
@@ -129,7 +133,7 @@ public class GenServiceImpl implements IGenService
             }
             catch (IOException e)
             {
-                throw new BaseException("渲染模板失败,表名:" + table.getTableName(), e.getMessage());
+                log.error("渲染模板失败,表名:" + table.getTableName(), e);
             }
         }
     }
diff --git a/src/main/java/com/ruoyi/project/tool/gen/util/GenUtils.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java
similarity index 76%
rename from src/main/java/com/ruoyi/project/tool/gen/util/GenUtils.java
rename to ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java
index 1a62cf2e..40979af6 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/util/GenUtils.java
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java
@@ -1,15 +1,16 @@
-package com.ruoyi.project.tool.gen.util;
+package com.ruoyi.generator.util;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import org.apache.velocity.VelocityContext;
+import com.ruoyi.common.config.Global;
 import com.ruoyi.common.constant.Constants;
-import com.ruoyi.common.constant.CommonMap;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.framework.config.GenConfig;
-import com.ruoyi.project.tool.gen.domain.ColumnInfo;
-import com.ruoyi.project.tool.gen.domain.TableInfo;
+import com.ruoyi.generator.domain.ColumnInfo;
+import com.ruoyi.generator.domain.TableInfo;
 
 /**
  * 代码生成器 工具类
@@ -27,6 +28,9 @@ public class GenUtils
     /** html空间路径 */
     private static final String TEMPLATES_PATH = "main/resources/templates";
 
+    /** 类型转换 */
+    public static Map<String, String> javaTypeMap = new HashMap<String, String>();
+
     /**
      * 设置列信息
      */
@@ -42,7 +46,7 @@ public class GenUtils
             column.setAttrname(StringUtils.uncapitalize(attrName));
 
             // 列的数据类型,转换成Java类型
-            String attrType = CommonMap.javaTypeMap.get(column.getDataType());
+            String attrType = javaTypeMap.get(column.getDataType());
             column.setAttrType(attrType);
 
             columsList.add(column);
@@ -59,7 +63,7 @@ public class GenUtils
     {
         // java对象数据传递到模板文件vm
         VelocityContext velocityContext = new VelocityContext();
-        String packageName = GenConfig.getPackageName();
+        String packageName = Global.getPackageName();
         velocityContext.put("tableName", table.getTableName());
         velocityContext.put("tableComment", replaceKeyword(table.getTableComment()));
         velocityContext.put("primaryKey", table.getPrimaryKey());
@@ -68,7 +72,7 @@ public class GenUtils
         velocityContext.put("moduleName", GenUtils.getModuleName(packageName));
         velocityContext.put("columns", table.getColumns());
         velocityContext.put("package", packageName + "." + table.getClassname());
-        velocityContext.put("author", GenConfig.getAuthor());
+        velocityContext.put("author", Global.getAuthor());
         velocityContext.put("datetime", DateUtils.getDate());
         return velocityContext;
     }
@@ -99,13 +103,13 @@ public class GenUtils
      */
     public static String tableToJava(String tableName)
     {
-        if (Constants.AUTO_REOMVE_PRE.equals(GenConfig.getAutoRemovePre()))
+        if (Constants.AUTO_REOMVE_PRE.equals(Global.getAutoRemovePre()))
         {
             tableName = tableName.substring(tableName.indexOf("_") + 1);
         }
-        if (StringUtils.isNotEmpty(GenConfig.getTablePrefix()))
+        if (StringUtils.isNotEmpty(Global.getTablePrefix()))
         {
-            tableName = tableName.replace(GenConfig.getTablePrefix(), "");
+            tableName = tableName.replace(Global.getTablePrefix(), "");
         }
         return StringUtils.convertToCamelCase(tableName);
     }
@@ -197,6 +201,30 @@ public class GenUtils
         return keyName;
     }
 
+    static
+    {
+        javaTypeMap.put("tinyint", "Integer");
+        javaTypeMap.put("smallint", "Integer");
+        javaTypeMap.put("mediumint", "Integer");
+        javaTypeMap.put("int", "Integer");
+        javaTypeMap.put("integer", "integer");
+        javaTypeMap.put("bigint", "Long");
+        javaTypeMap.put("float", "Float");
+        javaTypeMap.put("double", "Double");
+        javaTypeMap.put("decimal", "BigDecimal");
+        javaTypeMap.put("bit", "Boolean");
+        javaTypeMap.put("char", "String");
+        javaTypeMap.put("varchar", "String");
+        javaTypeMap.put("tinytext", "String");
+        javaTypeMap.put("text", "String");
+        javaTypeMap.put("mediumtext", "String");
+        javaTypeMap.put("longtext", "String");
+        javaTypeMap.put("time", "Date");
+        javaTypeMap.put("date", "Date");
+        javaTypeMap.put("datetime", "Date");
+        javaTypeMap.put("timestamp", "Date");
+    }
+
     public static void main(String[] args)
     {
         System.out.println(StringUtils.convertToCamelCase("user_name"));
diff --git a/src/main/java/com/ruoyi/project/tool/gen/util/VelocityInitializer.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java
similarity index 78%
rename from src/main/java/com/ruoyi/project/tool/gen/util/VelocityInitializer.java
rename to ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java
index 7f932fc3..6d7e5f70 100644
--- a/src/main/java/com/ruoyi/project/tool/gen/util/VelocityInitializer.java
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.tool.gen.util;
+package com.ruoyi.generator.util;
 
 import java.util.Properties;
 import org.apache.velocity.app.Velocity;
@@ -20,7 +20,8 @@ public class VelocityInitializer
         try
         {
             // 加载classpath目录下的vm文件
-            p.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
+            p.setProperty("file.resource.loader.class",
+                    "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
             // 定义字符集
             p.setProperty(Velocity.ENCODING_DEFAULT, Constants.UTF8);
             p.setProperty(Velocity.OUTPUT_ENCODING, Constants.UTF8);
diff --git a/src/main/resources/mybatis/tool/GenMapper.xml b/ruoyi-generator/src/main/resources/mapper/generator/GenMapper.xml
similarity index 94%
rename from src/main/resources/mybatis/tool/GenMapper.xml
rename to ruoyi-generator/src/main/resources/mapper/generator/GenMapper.xml
index bed2e418..4653bee2 100644
--- a/src/main/resources/mybatis/tool/GenMapper.xml
+++ b/ruoyi-generator/src/main/resources/mapper/generator/GenMapper.xml
@@ -2,7 +2,7 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.tool.gen.mapper.GenMapper">
+<mapper namespace="com.ruoyi.generator.mapper.GenMapper">
 
 	<resultMap type="TableInfo" id="TableInfoResult">
 		<id     property="tableName"      column="table_name"      />
diff --git a/ruoyi-quartz/pom.xml b/ruoyi-quartz/pom.xml
new file mode 100644
index 00000000..24550cd9
--- /dev/null
+++ b/ruoyi-quartz/pom.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ruoyi</artifactId>
+        <groupId>com.ruoyi</groupId>
+        <version>3.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>ruoyi-quartz</artifactId>
+	
+	<description>
+	    quartz定时任务
+	</description>
+
+    <dependencies>
+   
+        <!--Spring框架基本的核心工具-->
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-context-support</artifactId>
+		</dependency>
+		
+		<!-- 定时任务 -->
+		<dependency>
+			<groupId>org.quartz-scheduler</groupId>
+			<artifactId>quartz</artifactId>
+			<exclusions>
+				<exclusion>
+					<groupId>com.mchange</groupId>
+					<artifactId>c3p0</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		
+		<!-- 通用工具-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-common</artifactId>
+            <version>${ruoyi.version}</version>
+        </dependency>
+		
+    </dependencies>
+	
+</project>
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/framework/config/ScheduleConfig.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java
similarity index 91%
rename from src/main/java/com/ruoyi/framework/config/ScheduleConfig.java
rename to ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java
index 512ad060..83b60e69 100644
--- a/src/main/java/com/ruoyi/framework/config/ScheduleConfig.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java
@@ -1,4 +1,4 @@
-package com.ruoyi.framework.config;
+package com.ruoyi.quartz.config;
 
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -38,7 +38,7 @@ public class ScheduleConfig
         prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true");
 
         // sqlserver 启用
-        //prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?");
+        // prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?");
         prop.put("org.quartz.jobStore.misfireThreshold", "12000");
         prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");
         factory.setQuartzProperties(prop);
diff --git a/src/main/java/com/ruoyi/project/monitor/job/domain/Job.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java
similarity index 88%
rename from src/main/java/com/ruoyi/project/monitor/job/domain/Job.java
rename to ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java
index bab23fde..ff548af8 100644
--- a/src/main/java/com/ruoyi/project/monitor/job/domain/Job.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java
@@ -1,18 +1,18 @@
-package com.ruoyi.project.monitor.job.domain;
+package com.ruoyi.quartz.domain;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import java.io.Serializable;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.base.BaseEntity;
 import com.ruoyi.common.constant.ScheduleConstants;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import com.ruoyi.framework.web.domain.BaseEntity;
 
 /**
- * 定时任务调度信息 sys_job
+ * 定时任务调度表 sys_job
  * 
  * @author ruoyi
  */
-public class Job extends BaseEntity implements Serializable
+public class SysJob extends BaseEntity implements Serializable
 {
     private static final long serialVersionUID = 1L;
 
diff --git a/src/main/java/com/ruoyi/project/monitor/job/domain/JobLog.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java
similarity index 89%
rename from src/main/java/com/ruoyi/project/monitor/job/domain/JobLog.java
rename to ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java
index 9f27a1a2..38324c50 100644
--- a/src/main/java/com/ruoyi/project/monitor/job/domain/JobLog.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java
@@ -1,16 +1,16 @@
-package com.ruoyi.project.monitor.job.domain;
+package com.ruoyi.quartz.domain;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import com.ruoyi.framework.web.domain.BaseEntity;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.base.BaseEntity;
 
 /**
  * 定时任务调度日志表 sys_job_log
  * 
  * @author ruoyi
  */
-public class JobLog extends BaseEntity
+public class SysJobLog extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
 
diff --git a/src/main/java/com/ruoyi/project/monitor/job/mapper/JobLogMapper.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java
similarity index 73%
rename from src/main/java/com/ruoyi/project/monitor/job/mapper/JobLogMapper.java
rename to ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java
index 6b1129f8..083c4e46 100644
--- a/src/main/java/com/ruoyi/project/monitor/job/mapper/JobLogMapper.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.monitor.job.mapper;
+package com.ruoyi.quartz.mapper;
 
 import java.util.List;
-import com.ruoyi.project.monitor.job.domain.JobLog;
+import com.ruoyi.quartz.domain.SysJobLog;
 
 /**
  * 调度任务日志信息 数据层
  * 
  * @author ruoyi
  */
-public interface JobLogMapper
+public interface SysJobLogMapper
 {
     /**
      * 获取quartz调度器日志的计划任务
@@ -16,7 +16,7 @@ public interface JobLogMapper
      * @param jobLog 调度日志信息
      * @return 调度任务日志集合
      */
-    public List<JobLog> selectJobLogList(JobLog jobLog);
+    public List<SysJobLog> selectJobLogList(SysJobLog jobLog);
 
     /**
      * 通过调度任务日志ID查询调度信息
@@ -24,7 +24,7 @@ public interface JobLogMapper
      * @param jobLogId 调度任务日志ID
      * @return 调度任务日志对象信息
      */
-    public JobLog selectJobLogById(Long jobLogId);
+    public SysJobLog selectJobLogById(Long jobLogId);
 
     /**
      * 新增任务日志
@@ -32,7 +32,7 @@ public interface JobLogMapper
      * @param jobLog 调度日志信息
      * @return 结果
      */
-    public int insertJobLog(JobLog jobLog);
+    public int insertJobLog(SysJobLog jobLog);
 
     /**
      * 批量删除调度日志信息
@@ -49,7 +49,7 @@ public interface JobLogMapper
      * @return 结果
      */
     public int deleteJobLogById(Long jobId);
-    
+
     /**
      * 清空任务日志
      */
diff --git a/src/main/java/com/ruoyi/project/monitor/job/mapper/JobMapper.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java
similarity index 69%
rename from src/main/java/com/ruoyi/project/monitor/job/mapper/JobMapper.java
rename to ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java
index 7377ec49..aed5c24f 100644
--- a/src/main/java/com/ruoyi/project/monitor/job/mapper/JobMapper.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.monitor.job.mapper;
+package com.ruoyi.quartz.mapper;
 
 import java.util.List;
-import com.ruoyi.project.monitor.job.domain.Job;
+import com.ruoyi.quartz.domain.SysJob;
 
 /**
  * 调度任务信息 数据层
  * 
  * @author ruoyi
  */
-public interface JobMapper
+public interface SysJobMapper
 {
     /**
      * 查询调度任务日志集合
@@ -16,14 +16,14 @@ public interface JobMapper
      * @param job 调度信息
      * @return 操作日志集合
      */
-    public List<Job> selectJobList(Job job);
+    public List<SysJob> selectJobList(SysJob job);
 
     /**
      * 查询所有调度任务
      * 
      * @return 调度任务列表
      */
-    public List<Job> selectJobAll();
+    public List<SysJob> selectJobAll();
 
     /**
      * 通过调度ID查询调度任务信息
@@ -31,7 +31,7 @@ public interface JobMapper
      * @param jobId 调度ID
      * @return 角色对象信息
      */
-    public Job selectJobById(Long jobId);
+    public SysJob selectJobById(Long jobId);
 
     /**
      * 通过调度ID删除调度任务信息
@@ -39,7 +39,7 @@ public interface JobMapper
      * @param jobId 调度ID
      * @return 结果
      */
-    public int deleteJobById(Job job);
+    public int deleteJobById(SysJob job);
 
     /**
      * 批量删除调度任务信息
@@ -55,7 +55,7 @@ public interface JobMapper
      * @param job 调度任务信息
      * @return 结果
      */
-    public int updateJob(Job job);
+    public int updateJob(SysJob job);
 
     /**
      * 新增调度任务信息
@@ -63,5 +63,5 @@ public interface JobMapper
      * @param job 调度任务信息
      * @return 结果
      */
-    public int insertJob(Job job);
+    public int insertJob(SysJob job);
 }
diff --git a/src/main/java/com/ruoyi/project/monitor/job/service/IJobLogService.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java
similarity index 73%
rename from src/main/java/com/ruoyi/project/monitor/job/service/IJobLogService.java
rename to ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java
index 84d907cd..93ae0f77 100644
--- a/src/main/java/com/ruoyi/project/monitor/job/service/IJobLogService.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.monitor.job.service;
+package com.ruoyi.quartz.service;
 
 import java.util.List;
-import com.ruoyi.project.monitor.job.domain.JobLog;
+import com.ruoyi.quartz.domain.SysJobLog;
 
 /**
  * 定时任务调度日志信息信息 服务层
  * 
  * @author ruoyi
  */
-public interface IJobLogService
+public interface ISysJobLogService
 {
     /**
      * 获取quartz调度器日志的计划任务
@@ -16,7 +16,7 @@ public interface IJobLogService
      * @param jobLog 调度日志信息
      * @return 调度任务日志集合
      */
-    public List<JobLog> selectJobLogList(JobLog jobLog);
+    public List<SysJobLog> selectJobLogList(SysJobLog jobLog);
 
     /**
      * 通过调度任务日志ID查询调度信息
@@ -24,14 +24,14 @@ public interface IJobLogService
      * @param jobLogId 调度任务日志ID
      * @return 调度任务日志对象信息
      */
-    public JobLog selectJobLogById(Long jobLogId);
+    public SysJobLog selectJobLogById(Long jobLogId);
 
     /**
      * 新增任务日志
      * 
      * @param jobLog 调度日志信息
      */
-    public void addJobLog(JobLog jobLog);
+    public void addJobLog(SysJobLog jobLog);
 
     /**
      * 批量删除调度日志信息
diff --git a/src/main/java/com/ruoyi/project/monitor/job/service/IJobService.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java
similarity index 70%
rename from src/main/java/com/ruoyi/project/monitor/job/service/IJobService.java
rename to ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java
index f7b7d803..a02690df 100644
--- a/src/main/java/com/ruoyi/project/monitor/job/service/IJobService.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.monitor.job.service;
+package com.ruoyi.quartz.service;
 
 import java.util.List;
-import com.ruoyi.project.monitor.job.domain.Job;
+import com.ruoyi.quartz.domain.SysJob;
 
 /**
  * 定时任务调度信息信息 服务层
  * 
  * @author ruoyi
  */
-public interface IJobService
+public interface ISysJobService
 {
     /**
      * 获取quartz调度器的计划任务
@@ -16,7 +16,7 @@ public interface IJobService
      * @param job 调度信息
      * @return 调度任务集合
      */
-    public List<Job> selectJobList(Job job);
+    public List<SysJob> selectJobList(SysJob job);
 
     /**
      * 通过调度任务ID查询调度信息
@@ -24,7 +24,7 @@ public interface IJobService
      * @param jobId 调度任务ID
      * @return 调度任务对象信息
      */
-    public Job selectJobById(Long jobId);
+    public SysJob selectJobById(Long jobId);
 
     /**
      * 暂停任务
@@ -32,7 +32,7 @@ public interface IJobService
      * @param job 调度信息
      * @return 结果
      */
-    public int pauseJob(Job job);
+    public int pauseJob(SysJob job);
 
     /**
      * 恢复任务
@@ -40,7 +40,7 @@ public interface IJobService
      * @param job 调度信息
      * @return 结果
      */
-    public int resumeJob(Job job);
+    public int resumeJob(SysJob job);
 
     /**
      * 删除任务后,所对应的trigger也将被删除
@@ -48,7 +48,7 @@ public interface IJobService
      * @param job 调度信息
      * @return 结果
      */
-    public int deleteJob(Job job);
+    public int deleteJob(SysJob job);
 
     /**
      * 批量删除调度信息
@@ -64,7 +64,7 @@ public interface IJobService
      * @param job 调度信息
      * @return 结果
      */
-    public int changeStatus(Job job);
+    public int changeStatus(SysJob job);
 
     /**
      * 立即运行任务
@@ -72,7 +72,7 @@ public interface IJobService
      * @param job 调度信息
      * @return 结果
      */
-    public int run(Job job);
+    public int run(SysJob job);
 
     /**
      * 新增任务表达式
@@ -80,7 +80,7 @@ public interface IJobService
      * @param job 调度信息
      * @return 结果
      */
-    public int insertJobCron(Job job);
+    public int insertJobCron(SysJob job);
 
     /**
      * 更新任务的时间表达式
@@ -88,5 +88,5 @@ public interface IJobService
      * @param job 调度信息
      * @return 结果
      */
-    public int updateJobCron(Job job);
+    public int updateJobCron(SysJob job);
 }
diff --git a/src/main/java/com/ruoyi/project/monitor/job/service/JobLogServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java
similarity index 74%
rename from src/main/java/com/ruoyi/project/monitor/job/service/JobLogServiceImpl.java
rename to ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java
index 9661b6d6..37a4885c 100644
--- a/src/main/java/com/ruoyi/project/monitor/job/service/JobLogServiceImpl.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java
@@ -1,11 +1,12 @@
-package com.ruoyi.project.monitor.job.service;
+package com.ruoyi.quartz.service.impl;
 
 import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.common.support.Convert;
-import com.ruoyi.project.monitor.job.domain.JobLog;
-import com.ruoyi.project.monitor.job.mapper.JobLogMapper;
+import com.ruoyi.quartz.domain.SysJobLog;
+import com.ruoyi.quartz.mapper.SysJobLogMapper;
+import com.ruoyi.quartz.service.ISysJobLogService;
 
 /**
  * 定时任务调度日志信息 服务层
@@ -13,10 +14,10 @@ import com.ruoyi.project.monitor.job.mapper.JobLogMapper;
  * @author ruoyi
  */
 @Service
-public class JobLogServiceImpl implements IJobLogService
+public class SysJobLogServiceImpl implements ISysJobLogService
 {
     @Autowired
-    private JobLogMapper jobLogMapper;
+    private SysJobLogMapper jobLogMapper;
 
     /**
      * 获取quartz调度器日志的计划任务
@@ -25,7 +26,7 @@ public class JobLogServiceImpl implements IJobLogService
      * @return 调度任务日志集合
      */
     @Override
-    public List<JobLog> selectJobLogList(JobLog jobLog)
+    public List<SysJobLog> selectJobLogList(SysJobLog jobLog)
     {
         return jobLogMapper.selectJobLogList(jobLog);
     }
@@ -37,7 +38,7 @@ public class JobLogServiceImpl implements IJobLogService
      * @return 调度任务日志对象信息
      */
     @Override
-    public JobLog selectJobLogById(Long jobLogId)
+    public SysJobLog selectJobLogById(Long jobLogId)
     {
         return jobLogMapper.selectJobLogById(jobLogId);
     }
@@ -48,7 +49,7 @@ public class JobLogServiceImpl implements IJobLogService
      * @param jobLog 调度日志信息
      */
     @Override
-    public void addJobLog(JobLog jobLog)
+    public void addJobLog(SysJobLog jobLog)
     {
         jobLogMapper.insertJobLog(jobLog);
     }
@@ -75,7 +76,7 @@ public class JobLogServiceImpl implements IJobLogService
     {
         return jobLogMapper.deleteJobLogById(jobId);
     }
-    
+
     /**
      * 清空任务日志
      */
diff --git a/src/main/java/com/ruoyi/project/monitor/job/service/JobServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java
similarity index 76%
rename from src/main/java/com/ruoyi/project/monitor/job/service/JobServiceImpl.java
rename to ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java
index ac06694e..6a4531d2 100644
--- a/src/main/java/com/ruoyi/project/monitor/job/service/JobServiceImpl.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.monitor.job.service;
+package com.ruoyi.quartz.service.impl;
 
 import java.util.List;
 import javax.annotation.PostConstruct;
@@ -8,10 +8,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.common.constant.ScheduleConstants;
 import com.ruoyi.common.support.Convert;
-import com.ruoyi.common.utils.security.ShiroUtils;
-import com.ruoyi.project.monitor.job.domain.Job;
-import com.ruoyi.project.monitor.job.mapper.JobMapper;
-import com.ruoyi.project.monitor.job.util.ScheduleUtils;
+import com.ruoyi.quartz.domain.SysJob;
+import com.ruoyi.quartz.mapper.SysJobMapper;
+import com.ruoyi.quartz.service.ISysJobService;
+import com.ruoyi.quartz.util.ScheduleUtils;
 
 /**
  * 定时任务调度信息 服务层
@@ -19,13 +19,13 @@ import com.ruoyi.project.monitor.job.util.ScheduleUtils;
  * @author ruoyi
  */
 @Service
-public class JobServiceImpl implements IJobService
+public class SysJobServiceImpl implements ISysJobService
 {
     @Autowired
     private Scheduler scheduler;
 
     @Autowired
-    private JobMapper jobMapper;
+    private SysJobMapper jobMapper;
 
     /**
      * 项目启动时,初始化定时器
@@ -33,8 +33,8 @@ public class JobServiceImpl implements IJobService
     @PostConstruct
     public void init()
     {
-        List<Job> jobList = jobMapper.selectJobAll();
-        for (Job job : jobList)
+        List<SysJob> jobList = jobMapper.selectJobAll();
+        for (SysJob job : jobList)
         {
             CronTrigger cronTrigger = ScheduleUtils.getCronTrigger(scheduler, job.getJobId());
             // 如果不存在,则创建
@@ -56,7 +56,7 @@ public class JobServiceImpl implements IJobService
      * @return
      */
     @Override
-    public List<Job> selectJobList(Job job)
+    public List<SysJob> selectJobList(SysJob job)
     {
         return jobMapper.selectJobList(job);
     }
@@ -68,7 +68,7 @@ public class JobServiceImpl implements IJobService
      * @return 调度任务对象信息
      */
     @Override
-    public Job selectJobById(Long jobId)
+    public SysJob selectJobById(Long jobId)
     {
         return jobMapper.selectJobById(jobId);
     }
@@ -79,10 +79,9 @@ public class JobServiceImpl implements IJobService
      * @param job 调度信息
      */
     @Override
-    public int pauseJob(Job job)
+    public int pauseJob(SysJob job)
     {
         job.setStatus(ScheduleConstants.Status.PAUSE.getValue());
-        job.setUpdateBy(ShiroUtils.getLoginName());
         int rows = jobMapper.updateJob(job);
         if (rows > 0)
         {
@@ -97,10 +96,9 @@ public class JobServiceImpl implements IJobService
      * @param job 调度信息
      */
     @Override
-    public int resumeJob(Job job)
+    public int resumeJob(SysJob job)
     {
         job.setStatus(ScheduleConstants.Status.NORMAL.getValue());
-        job.setUpdateBy(ShiroUtils.getLoginName());
         int rows = jobMapper.updateJob(job);
         if (rows > 0)
         {
@@ -115,7 +113,7 @@ public class JobServiceImpl implements IJobService
      * @param job 调度信息
      */
     @Override
-    public int deleteJob(Job job)
+    public int deleteJob(SysJob job)
     {
         int rows = jobMapper.deleteJobById(job);
         if (rows > 0)
@@ -137,7 +135,7 @@ public class JobServiceImpl implements IJobService
         Long[] jobIds = Convert.toLongArray(ids);
         for (Long jobId : jobIds)
         {
-            Job job = jobMapper.selectJobById(jobId);
+            SysJob job = jobMapper.selectJobById(jobId);
             deleteJob(job);
         }
     }
@@ -148,7 +146,7 @@ public class JobServiceImpl implements IJobService
      * @param job 调度信息
      */
     @Override
-    public int changeStatus(Job job)
+    public int changeStatus(SysJob job)
     {
         int rows = 0;
         String status = job.getStatus();
@@ -169,7 +167,7 @@ public class JobServiceImpl implements IJobService
      * @param job 调度信息
      */
     @Override
-    public int run(Job job)
+    public int run(SysJob job)
     {
         return ScheduleUtils.run(scheduler, selectJobById(job.getJobId()));
     }
@@ -180,9 +178,8 @@ public class JobServiceImpl implements IJobService
      * @param job 调度信息 调度信息
      */
     @Override
-    public int insertJobCron(Job job)
+    public int insertJobCron(SysJob job)
     {
-        job.setCreateBy(ShiroUtils.getLoginName());
         job.setStatus(ScheduleConstants.Status.PAUSE.getValue());
         int rows = jobMapper.insertJob(job);
         if (rows > 0)
@@ -198,9 +195,8 @@ public class JobServiceImpl implements IJobService
      * @param job 调度信息
      */
     @Override
-    public int updateJobCron(Job job)
+    public int updateJobCron(SysJob job)
     {
-        job.setUpdateBy(ShiroUtils.getLoginName());
         int rows = jobMapper.updateJob(job);
         if (rows > 0)
         {
diff --git a/src/main/java/com/ruoyi/project/monitor/job/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
similarity index 84%
rename from src/main/java/com/ruoyi/project/monitor/job/task/RyTask.java
rename to ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
index a35c0b0d..a8dc9e11 100644
--- a/src/main/java/com/ruoyi/project/monitor/job/task/RyTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.monitor.job.task;
+package com.ruoyi.quartz.task;
 
 import org.springframework.stereotype.Component;
 
diff --git a/src/main/java/com/ruoyi/project/monitor/job/util/ScheduleJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleJob.java
similarity index 83%
rename from src/main/java/com/ruoyi/project/monitor/job/util/ScheduleJob.java
rename to ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleJob.java
index 4d1c0730..ddd110c6 100644
--- a/src/main/java/com/ruoyi/project/monitor/job/util/ScheduleJob.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleJob.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.monitor.job.util;
+package com.ruoyi.quartz.util;
 
 import java.util.Date;
 import java.util.concurrent.ExecutorService;
@@ -12,13 +12,12 @@ import org.springframework.scheduling.quartz.QuartzJobBean;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.constant.ScheduleConstants;
 import com.ruoyi.common.utils.bean.BeanUtils;
-import com.ruoyi.common.utils.spring.SpringUtils;
-import com.ruoyi.project.monitor.job.domain.Job;
-import com.ruoyi.project.monitor.job.domain.JobLog;
-import com.ruoyi.project.monitor.job.service.IJobLogService;
+import com.ruoyi.quartz.domain.SysJob;
+import com.ruoyi.quartz.domain.SysJobLog;
+import com.ruoyi.quartz.service.ISysJobLogService;
 
 /**
- * 定时任务
+ * 定时任务处理
  * 
  * @author ruoyi
  *
@@ -29,15 +28,15 @@ public class ScheduleJob extends QuartzJobBean
 
     private ExecutorService service = Executors.newSingleThreadExecutor();
 
+    private final static ISysJobLogService jobLogService = (ISysJobLogService) SpringContextUtil.getBean("sysJobLogServiceImpl");
+
     @Override
     protected void executeInternal(JobExecutionContext context) throws JobExecutionException
     {
-        Job job = new Job();
+        SysJob job = new SysJob();
         BeanUtils.copyBeanProp(job, context.getMergedJobDataMap().get(ScheduleConstants.TASK_PROPERTIES));
 
-        IJobLogService jobLogService = (IJobLogService) SpringUtils.getBean(IJobLogService.class);
-
-        JobLog jobLog = new JobLog();
+        SysJobLog jobLog = new SysJobLog();
         jobLog.setJobName(job.getJobName());
         jobLog.setJobGroup(job.getJobGroup());
         jobLog.setMethodName(job.getMethodName());
diff --git a/src/main/java/com/ruoyi/project/monitor/job/util/ScheduleRunnable.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleRunnable.java
similarity index 76%
rename from src/main/java/com/ruoyi/project/monitor/job/util/ScheduleRunnable.java
rename to ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleRunnable.java
index 35ab2fc7..aea572b4 100644
--- a/src/main/java/com/ruoyi/project/monitor/job/util/ScheduleRunnable.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleRunnable.java
@@ -1,9 +1,10 @@
-package com.ruoyi.project.monitor.job.util;
+package com.ruoyi.quartz.util;
 
 import java.lang.reflect.Method;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.util.ReflectionUtils;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.spring.SpringUtils;
 
 /**
  * 执行定时任务
@@ -13,6 +14,8 @@ import com.ruoyi.common.utils.spring.SpringUtils;
  */
 public class ScheduleRunnable implements Runnable
 {
+    private static final Logger log = LoggerFactory.getLogger(ScheduleRunnable.class);
+
     private Object target;
     private Method method;
     private String params;
@@ -20,7 +23,7 @@ public class ScheduleRunnable implements Runnable
     public ScheduleRunnable(String beanName, String methodName, String params)
             throws NoSuchMethodException, SecurityException
     {
-        this.target = SpringUtils.getBean(beanName);
+        this.target = SpringContextUtil.getBean(beanName);
         this.params = params;
 
         if (StringUtils.isNotEmpty(params))
@@ -50,7 +53,7 @@ public class ScheduleRunnable implements Runnable
         }
         catch (Exception e)
         {
-            e.printStackTrace();
+            log.error("执行定时任务  - :", e);
         }
     }
 }
diff --git a/src/main/java/com/ruoyi/project/monitor/job/util/ScheduleUtils.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java
similarity index 90%
rename from src/main/java/com/ruoyi/project/monitor/job/util/ScheduleUtils.java
rename to ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java
index 2f3e81af..9a6b9ca6 100644
--- a/src/main/java/com/ruoyi/project/monitor/job/util/ScheduleUtils.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.monitor.job.util;
+package com.ruoyi.quartz.util;
 
 import org.quartz.CronScheduleBuilder;
 import org.quartz.CronTrigger;
@@ -15,7 +15,7 @@ import org.slf4j.LoggerFactory;
 import com.ruoyi.common.constant.ScheduleConstants;
 import com.ruoyi.common.exception.job.TaskException;
 import com.ruoyi.common.exception.job.TaskException.Code;
-import com.ruoyi.project.monitor.job.domain.Job;
+import com.ruoyi.quartz.domain.SysJob;
 
 /**
  * 定时任务工具类
@@ -62,7 +62,7 @@ public class ScheduleUtils
     /**
      * 创建定时任务
      */
-    public static void createScheduleJob(Scheduler scheduler, Job job)
+    public static void createScheduleJob(Scheduler scheduler, SysJob job)
     {
         try
         {
@@ -74,7 +74,8 @@ public class ScheduleUtils
             cronScheduleBuilder = handleCronScheduleMisfirePolicy(job, cronScheduleBuilder);
 
             // 按新的cronExpression表达式构建一个新的trigger
-            CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(job.getJobId())).withSchedule(cronScheduleBuilder).build();
+            CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(job.getJobId()))
+                    .withSchedule(cronScheduleBuilder).build();
 
             // 放入参数,运行时的方法可以获取
             jobDetail.getJobDataMap().put(ScheduleConstants.TASK_PROPERTIES, job);
@@ -100,7 +101,7 @@ public class ScheduleUtils
     /**
      * 更新定时任务
      */
-    public static void updateScheduleJob(Scheduler scheduler, Job job)
+    public static void updateScheduleJob(Scheduler scheduler, SysJob job)
     {
         try
         {
@@ -140,7 +141,7 @@ public class ScheduleUtils
     /**
      * 立即执行任务
      */
-    public static int run(Scheduler scheduler, Job job)
+    public static int run(Scheduler scheduler, SysJob job)
     {
         int rows = 0;
         try
@@ -204,7 +205,7 @@ public class ScheduleUtils
         }
     }
 
-    public static CronScheduleBuilder handleCronScheduleMisfirePolicy(Job job, CronScheduleBuilder cb)
+    public static CronScheduleBuilder handleCronScheduleMisfirePolicy(SysJob job, CronScheduleBuilder cb)
             throws TaskException
     {
         switch (job.getMisfirePolicy())
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/SpringContextUtil.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/SpringContextUtil.java
new file mode 100644
index 00000000..6146b039
--- /dev/null
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/SpringContextUtil.java
@@ -0,0 +1,49 @@
+package com.ruoyi.quartz.util;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Service;
+
+/**
+ * spring管理环境中获取bean
+ * 
+ * @author yangzz
+ */
+@Service("springContextUtil")
+public class SpringContextUtil implements ApplicationContextAware
+{
+    // Spring应用上下文环境
+    private static ApplicationContext applicationContext;
+
+    /**
+     * 实现ApplicationContextAware接口的回调方法,设置上下文环境
+     * 
+     * @param applicationContext
+     */
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext)
+    {
+        SpringContextUtil.applicationContext = applicationContext;
+    }
+
+    /**
+     * @return ApplicationContext
+     */
+    public static ApplicationContext getApplicationContext()
+    {
+        return applicationContext;
+    }
+
+    /**
+     * 获取对象
+     * 
+     * @param name
+     * @return Object
+     * @throws BeansException
+     */
+    public static Object getBean(String name) throws BeansException
+    {
+        return applicationContext.getBean(name);
+    }
+}
diff --git a/src/main/resources/mybatis/monitor/JobLogMapper.xml b/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml
similarity index 87%
rename from src/main/resources/mybatis/monitor/JobLogMapper.xml
rename to ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml
index cd2d0704..5353deb1 100644
--- a/src/main/resources/mybatis/monitor/JobLogMapper.xml
+++ b/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.monitor.job.mapper.JobLogMapper">
+<mapper namespace="com.ruoyi.quartz.mapper.SysJobLogMapper">
 
-	<resultMap type="JobLog" id="JobLogResult">
+	<resultMap type="SysJobLog" id="SysJobLogResult">
 		<id     property="jobLogId"       column="job_log_id"      />
 		<result property="jobName"        column="job_name"        />
 		<result property="jobGroup"       column="job_group"       />
@@ -21,7 +21,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		from sys_job_log
     </sql>
 	
-	<select id="selectJobLogList" parameterType="JobLog" resultMap="JobLogResult">
+	<select id="selectJobLogList" parameterType="SysJobLog" resultMap="SysJobLogResult">
 		<include refid="selectJobLogVo"/>
 		<where>
 			<if test="jobName != null and jobName != ''">
@@ -42,11 +42,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		</where>
 	</select>
 	
-	<select id="selectJobAll" resultMap="JobLogResult">
+	<select id="selectJobAll" resultMap="SysJobLogResult">
 		<include refid="selectJobLogVo"/>
 	</select>
 	
-	<select id="selectJobLogById" parameterType="Long" resultMap="JobLogResult">
+	<select id="selectJobLogById" parameterType="Long" resultMap="SysJobLogResult">
 		<include refid="selectJobLogVo"/>
 		where job_log_id = #{jobLogId}
 	</select>
@@ -66,7 +66,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         truncate table sys_job_log
     </update>
  	
- 	<insert id="insertJobLog" parameterType="JobLog">
+ 	<insert id="insertJobLog" parameterType="SysJobLog">
  		insert into sys_job_log(
  			<if test="jobLogId != null and jobLogId != 0">job_log_id,</if>
  			<if test="jobName != null and jobName != ''">job_name,</if>
diff --git a/src/main/resources/mybatis/monitor/JobMapper.xml b/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml
similarity index 88%
rename from src/main/resources/mybatis/monitor/JobMapper.xml
rename to ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml
index fc4a2c8d..2b5bcc49 100644
--- a/src/main/resources/mybatis/monitor/JobMapper.xml
+++ b/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.monitor.job.mapper.JobMapper">
+<mapper namespace="com.ruoyi.quartz.mapper.SysJobMapper">
 
-	<resultMap type="Job" id="JobResult">
+	<resultMap type="SysJob" id="SysJobResult">
 		<id     property="jobId"          column="job_id"          />
 		<result property="jobName"        column="job_name"        />
 		<result property="jobGroup"       column="job_group"       />
@@ -25,7 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		from sys_job
     </sql>
 	
-	<select id="selectJobList" parameterType="Job" resultMap="JobResult">
+	<select id="selectJobList" parameterType="SysJob" resultMap="SysJobResult">
 		<include refid="selectJobVo"/>
 		<where>
 			<if test="jobName != null and jobName != ''">
@@ -40,11 +40,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		</where>
 	</select>
 	
-	<select id="selectJobAll" resultMap="JobResult">
+	<select id="selectJobAll" resultMap="SysJobResult">
 		<include refid="selectJobVo"/>
 	</select>
 	
-	<select id="selectJobById" parameterType="Long" resultMap="JobResult">
+	<select id="selectJobById" parameterType="Long" resultMap="SysJobResult">
 		<include refid="selectJobVo"/>
 		where job_id = #{jobId}
 	</select>
@@ -60,7 +60,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach> 
  	</delete>
  	
- 	<update id="updateJob" parameterType="Job">
+ 	<update id="updateJob" parameterType="SysJob">
  		update sys_job
  		<set>
  			<if test="jobName != null and jobName != ''">job_name = #{jobName},</if>
@@ -77,7 +77,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  		where job_id = #{jobId}
 	</update>
  	
- 	<insert id="insertJob" parameterType="Job" useGeneratedKeys="true" keyProperty="jobId">
+ 	<insert id="insertJob" parameterType="SysJob" useGeneratedKeys="true" keyProperty="jobId">
  		insert into sys_job(
  			<if test="jobId != null and jobId != 0">job_id,</if>
  			<if test="jobName != null and jobName != ''">job_name,</if>
diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml
new file mode 100644
index 00000000..0dc3e91b
--- /dev/null
+++ b/ruoyi-system/pom.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>ruoyi</artifactId>
+        <groupId>com.ruoyi</groupId>
+        <version>3.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    
+    <artifactId>ruoyi-system</artifactId>
+    
+    <description>
+	    system系统模块
+	</description>
+	
+    <dependencies>
+        
+        <!-- SpringBoot集成mybatis框架 -->
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+            <version>${mybatis.boot.version}</version>
+        </dependency>
+        
+        <!-- Mysql驱动包 -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+        
+		<!-- 通用工具-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-common</artifactId>
+            <version>${ruoyi.version}</version>
+        </dependency>
+        
+    </dependencies>
+	
+</project>
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/project/system/config/domain/Config.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java
similarity index 88%
rename from src/main/java/com/ruoyi/project/system/config/domain/Config.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java
index e8d8bb9d..4abfa988 100644
--- a/src/main/java/com/ruoyi/project/system/config/domain/Config.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java
@@ -1,16 +1,16 @@
-package com.ruoyi.project.system.config.domain;
+package com.ruoyi.system.domain;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import com.ruoyi.framework.web.domain.BaseEntity;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.base.BaseEntity;
 
 /**
  * 参数配置表 sys_config
  * 
  * @author ruoyi
  */
-public class Config extends BaseEntity
+public class SysConfig extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
 
diff --git a/src/main/java/com/ruoyi/project/system/dept/domain/Dept.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDept.java
similarity index 91%
rename from src/main/java/com/ruoyi/project/system/dept/domain/Dept.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDept.java
index acc30bf9..56cc262b 100644
--- a/src/main/java/com/ruoyi/project/system/dept/domain/Dept.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDept.java
@@ -1,15 +1,15 @@
-package com.ruoyi.project.system.dept.domain;
+package com.ruoyi.system.domain;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
-import com.ruoyi.framework.web.domain.BaseEntity;
+import com.ruoyi.common.base.BaseEntity;
 
 /**
  * 部门表 sys_dept
  * 
  * @author ruoyi
  */
-public class Dept extends BaseEntity
+public class SysDept extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
 
@@ -33,6 +33,7 @@ public class Dept extends BaseEntity
 
     /** 联系电话 */
     private String phone;
+    
     /** 邮箱 */
     private String email;
 
diff --git a/src/main/java/com/ruoyi/project/system/dict/domain/DictData.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictData.java
similarity index 89%
rename from src/main/java/com/ruoyi/project/system/dict/domain/DictData.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictData.java
index e8f69641..3f64ea9e 100644
--- a/src/main/java/com/ruoyi/project/system/dict/domain/DictData.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictData.java
@@ -1,16 +1,16 @@
-package com.ruoyi.project.system.dict.domain;
+package com.ruoyi.system.domain;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import com.ruoyi.framework.web.domain.BaseEntity;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.base.BaseEntity;
 
 /**
  * 字典数据表 sys_dict_data
  * 
  * @author ruoyi
  */
-public class DictData extends BaseEntity
+public class SysDictData extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
 
@@ -34,7 +34,7 @@ public class DictData extends BaseEntity
     @Excel(name = "字典类型")
     private String dictType;
 
-    /** 字典样式 */
+    /** 样式属性(其他样式扩展) */
     @Excel(name = "字典样式")
     private String cssClass;
 
@@ -138,8 +138,8 @@ public class DictData extends BaseEntity
     {
         this.status = status;
     }
-
-    @Override
+    
+	@Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
             .append("dictCode", getDictCode())
diff --git a/src/main/java/com/ruoyi/project/system/dict/domain/DictType.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictType.java
similarity index 84%
rename from src/main/java/com/ruoyi/project/system/dict/domain/DictType.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictType.java
index ad65e0d0..827b5ddd 100644
--- a/src/main/java/com/ruoyi/project/system/dict/domain/DictType.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysDictType.java
@@ -1,16 +1,16 @@
-package com.ruoyi.project.system.dict.domain;
+package com.ruoyi.system.domain;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import com.ruoyi.framework.web.domain.BaseEntity;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.base.BaseEntity;
 
 /**
- * 字典类型对象 sys_dict_type
+ * 字典类型表 sys_dict_type
  * 
  * @author ruoyi
  */
-public class DictType extends BaseEntity
+public class SysDictType extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
 
diff --git a/src/main/java/com/ruoyi/project/monitor/logininfor/domain/Logininfor.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java
similarity index 88%
rename from src/main/java/com/ruoyi/project/monitor/logininfor/domain/Logininfor.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java
index 1f18912f..f4adbc0b 100644
--- a/src/main/java/com/ruoyi/project/monitor/logininfor/domain/Logininfor.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java
@@ -1,52 +1,52 @@
-package com.ruoyi.project.monitor.logininfor.domain;
+package com.ruoyi.system.domain;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import com.ruoyi.framework.web.domain.BaseEntity;
 import java.util.Date;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.base.BaseEntity;
 
 /**
  * 系统访问记录表 sys_logininfor
  * 
  * @author ruoyi
  */
-public class Logininfor extends BaseEntity
+public class SysLogininfor extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
-
+    
     /** ID */
     @Excel(name = "序号")
     private Long infoId;
-
+    
     /** 用户账号 */
     @Excel(name = "用户账号")
     private String loginName;
-
+    
     /** 登录状态 0成功 1失败 */
     @Excel(name = "登录状态")
     private String status;
-
+    
     /** 登录IP地址 */
     @Excel(name = "登录地址")
     private String ipaddr;
-
+    
     /** 登录地点 */
     @Excel(name = "登录地点")
     private String loginLocation;
-
+    
     /** 浏览器类型 */
     @Excel(name = "浏览器")
     private String browser;
-
+    
     /** 操作系统 */
     @Excel(name = "操作系统 ")
     private String os;
-
+    
     /** 提示消息 */
     @Excel(name = "提示消息")
     private String msg;
-
+    
     /** 访问时间 */
     @Excel(name = "访问时间")
     private Date loginTime;
diff --git a/src/main/java/com/ruoyi/project/system/menu/domain/Menu.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysMenu.java
similarity index 87%
rename from src/main/java/com/ruoyi/project/system/menu/domain/Menu.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/domain/SysMenu.java
index fffd5652..eb769755 100644
--- a/src/main/java/com/ruoyi/project/system/menu/domain/Menu.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysMenu.java
@@ -1,17 +1,17 @@
-package com.ruoyi.project.system.menu.domain;
+package com.ruoyi.system.domain;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import java.util.ArrayList;
 import java.util.List;
-import com.ruoyi.framework.web.domain.BaseEntity;
+import com.ruoyi.common.base.BaseEntity;
 
 /**
  * 菜单权限表 sys_menu
  * 
  * @author ruoyi
  */
-public class Menu extends BaseEntity
+public class SysMenu extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
     
@@ -46,7 +46,7 @@ public class Menu extends BaseEntity
     private String icon;
     
     /** 子菜单 */
-    private List<Menu> children = new ArrayList<Menu>();
+    private List<SysMenu> children = new ArrayList<SysMenu>();
 
     public Long getMenuId()
     {
@@ -148,12 +148,12 @@ public class Menu extends BaseEntity
         this.icon = icon;
     }
 
-    public List<Menu> getChildren()
+    public List<SysMenu> getChildren()
     {
         return children;
     }
 
-    public void setChildren(List<Menu> children)
+    public void setChildren(List<SysMenu> children)
     {
         this.children = children;
     }
diff --git a/src/main/java/com/ruoyi/project/system/notice/domain/Notice.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java
similarity index 89%
rename from src/main/java/com/ruoyi/project/system/notice/domain/Notice.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java
index e07513f7..e119f55b 100644
--- a/src/main/java/com/ruoyi/project/system/notice/domain/Notice.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java
@@ -1,26 +1,30 @@
-package com.ruoyi.project.system.notice.domain;
+package com.ruoyi.system.domain;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
-import com.ruoyi.framework.web.domain.BaseEntity;
+import com.ruoyi.common.base.BaseEntity;
 
 /**
  * 通知公告表 sys_notice
  * 
  * @author ruoyi
  */
-public class Notice extends BaseEntity
+public class SysNotice extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
 
     /** 公告ID */
     private Long noticeId;
+    
     /** 公告标题 */
     private String noticeTitle;
+    
     /** 公告类型(1通知 2公告) */
     private String noticeType;
+    
     /** 公告内容 */
     private String noticeContent;
+    
     /** 公告状态(0正常 1关闭) */
     private String status;
 
diff --git a/src/main/java/com/ruoyi/project/monitor/operlog/domain/OperLog.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java
similarity index 88%
rename from src/main/java/com/ruoyi/project/monitor/operlog/domain/OperLog.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java
index 7b2ddc8d..74f60893 100644
--- a/src/main/java/com/ruoyi/project/monitor/operlog/domain/OperLog.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java
@@ -1,17 +1,17 @@
-package com.ruoyi.project.monitor.operlog.domain;
+package com.ruoyi.system.domain;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import java.util.Date;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import com.ruoyi.framework.web.domain.BaseEntity;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.base.BaseEntity;
 
 /**
  * 操作日志记录表 oper_log
  * 
  * @author ruoyi
  */
-public class OperLog extends BaseEntity
+public class SysOperLog extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
 
@@ -23,7 +23,7 @@ public class OperLog extends BaseEntity
     @Excel(name = "操作模块")
     private String title;
 
-    /** 操作业务类型 */
+    /** 业务类型(0其它 1新增 2修改 3删除) */
     @Excel(name = "业务类型")
     private Integer businessType;
 
@@ -31,7 +31,7 @@ public class OperLog extends BaseEntity
     @Excel(name = "请求方法")
     private String method;
 
-    /** 操作人类别 */
+    /** 操作类别(0其它 1后台用户 2手机端用户) */
     @Excel(name = "操作类别")
     private Integer operatorType;
 
@@ -59,7 +59,7 @@ public class OperLog extends BaseEntity
     @Excel(name = "请求参数")
     private String operParam;
 
-    /** 状态0正常 1异常 */
+    /** 操作状态(0正常 1异常) */
     @Excel(name = "状态")
     private Integer status;
 
diff --git a/src/main/java/com/ruoyi/project/system/post/domain/Post.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java
similarity index 88%
rename from src/main/java/com/ruoyi/project/system/post/domain/Post.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java
index b0df6d69..e27c0a21 100644
--- a/src/main/java/com/ruoyi/project/system/post/domain/Post.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java
@@ -1,16 +1,16 @@
-package com.ruoyi.project.system.post.domain;
+package com.ruoyi.system.domain;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import com.ruoyi.framework.web.domain.BaseEntity;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.base.BaseEntity;
 
 /**
  * 岗位表 sys_post
  * 
  * @author ruoyi
  */
-public class Post extends BaseEntity
+public class SysPost extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
 
diff --git a/src/main/java/com/ruoyi/project/system/role/domain/Role.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRole.java
similarity index 90%
rename from src/main/java/com/ruoyi/project/system/role/domain/Role.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRole.java
index 559af982..d47aadff 100644
--- a/src/main/java/com/ruoyi/project/system/role/domain/Role.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRole.java
@@ -1,16 +1,16 @@
-package com.ruoyi.project.system.role.domain;
+package com.ruoyi.system.domain;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import com.ruoyi.framework.web.domain.BaseEntity;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.base.BaseEntity;
 
 /**
  * 角色表 sys_role
  * 
  * @author ruoyi
  */
-public class Role extends BaseEntity
+public class SysRole extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
 
diff --git a/src/main/java/com/ruoyi/project/system/role/domain/RoleDept.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java
similarity index 87%
rename from src/main/java/com/ruoyi/project/system/role/domain/RoleDept.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java
index 18d32461..8ed8e473 100644
--- a/src/main/java/com/ruoyi/project/system/role/domain/RoleDept.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.role.domain;
+package com.ruoyi.system.domain;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
@@ -8,7 +8,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
  * 
  * @author ruoyi
  */
-public class RoleDept
+public class SysRoleDept
 {
     /** 角色ID */
     private Long roleId;
diff --git a/src/main/java/com/ruoyi/project/system/role/domain/RoleMenu.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java
similarity index 87%
rename from src/main/java/com/ruoyi/project/system/role/domain/RoleMenu.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java
index 00b14273..59d28699 100644
--- a/src/main/java/com/ruoyi/project/system/role/domain/RoleMenu.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.role.domain;
+package com.ruoyi.system.domain;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
@@ -8,7 +8,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
  * 
  * @author ruoyi
  */
-public class RoleMenu
+public class SysRoleMenu
 {
     /** 角色ID */
     private Long roleId;
diff --git a/src/main/java/com/ruoyi/project/system/user/domain/User.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUser.java
similarity index 81%
rename from src/main/java/com/ruoyi/project/system/user/domain/User.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUser.java
index c54628c8..3d15a514 100644
--- a/src/main/java/com/ruoyi/project/system/user/domain/User.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUser.java
@@ -1,21 +1,18 @@
-package com.ruoyi.project.system.user.domain;
+package com.ruoyi.system.domain;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import java.util.Date;
 import java.util.List;
-import org.apache.shiro.crypto.SecureRandomNumberGenerator;
-import com.ruoyi.framework.aspectj.lang.annotation.Excel;
-import com.ruoyi.framework.web.domain.BaseEntity;
-import com.ruoyi.project.system.dept.domain.Dept;
-import com.ruoyi.project.system.role.domain.Role;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.base.BaseEntity;
 
 /**
  * 用户对象 sys_user
  * 
  * @author ruoyi
  */
-public class User extends BaseEntity
+public class SysUser extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
 
@@ -74,10 +71,9 @@ public class User extends BaseEntity
     private Date loginDate;
 
     /** 部门对象 */
-    private Dept dept;
+    private SysDept dept;
 
-    /** 角色集合 */
-    private List<Role> roles;
+    private List<SysRole> roles;
 
     /** 角色组 */
     private Long[] roleIds;
@@ -205,17 +201,6 @@ public class User extends BaseEntity
         this.salt = salt;
     }
 
-    /**
-     * 生成随机盐
-     */
-    public void randomSalt()
-    {
-        // 一个Byte占两个字节,此处生成的3字节,字符串长度为6
-        SecureRandomNumberGenerator secureRandom = new SecureRandomNumberGenerator();
-        String hex = secureRandom.nextBytes(3).toHex();
-        setSalt(hex);
-    }
-
     public String getStatus()
     {
         return status;
@@ -256,22 +241,22 @@ public class User extends BaseEntity
         this.loginDate = loginDate;
     }
 
-    public Dept getDept()
+    public SysDept getDept()
     {
         return dept;
     }
 
-    public void setDept(Dept dept)
+    public void setDept(SysDept dept)
     {
         this.dept = dept;
     }
 
-    public List<Role> getRoles()
+    public List<SysRole> getRoles()
     {
         return roles;
     }
 
-    public void setRoles(List<Role> roles)
+    public void setRoles(List<SysRole> roles)
     {
         this.roles = roles;
     }
diff --git a/src/main/java/com/ruoyi/project/monitor/online/domain/UserOnline.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java
similarity index 83%
rename from src/main/java/com/ruoyi/project/monitor/online/domain/UserOnline.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java
index 1c86fb5f..be480667 100644
--- a/src/main/java/com/ruoyi/project/monitor/online/domain/UserOnline.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java
@@ -1,17 +1,17 @@
-package com.ruoyi.project.monitor.online.domain;
+package com.ruoyi.system.domain;
 
 import java.util.Date;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
-import com.ruoyi.framework.web.domain.BaseEntity;
-import com.ruoyi.project.monitor.online.domain.OnlineSession.OnlineStatus;
+import com.ruoyi.common.base.BaseEntity;
+import com.ruoyi.common.enums.OnlineStatus;
 
 /**
  * 当前在线会话 sys_user_online
  * 
  * @author ruoyi
  */
-public class UserOnline extends BaseEntity
+public class SysUserOnline extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
     
@@ -48,9 +48,6 @@ public class UserOnline extends BaseEntity
     /** 在线状态 */
     private OnlineStatus status = OnlineStatus.on_line;
 
-    /** 备份的当前用户会话 */
-    private OnlineSession session;
-
     public String getSessionId()
     {
         return sessionId;
@@ -160,18 +157,8 @@ public class UserOnline extends BaseEntity
     {
         this.status = status;
     }
-
-    public OnlineSession getSession()
-    {
-        return session;
-    }
-
-    public void setSession(OnlineSession session)
-    {
-        this.session = session;
-    }
-
-    @Override
+    
+	@Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
             .append("sessionId", getSessionId())
diff --git a/src/main/java/com/ruoyi/project/system/user/domain/UserPost.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java
similarity index 87%
rename from src/main/java/com/ruoyi/project/system/user/domain/UserPost.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java
index b27cb667..07ceb85c 100644
--- a/src/main/java/com/ruoyi/project/system/user/domain/UserPost.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.user.domain;
+package com.ruoyi.system.domain;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
@@ -8,10 +8,11 @@ import org.apache.commons.lang3.builder.ToStringStyle;
  * 
  * @author ruoyi
  */
-public class UserPost
+public class SysUserPost
 {
     /** 用户ID */
     private Long userId;
+    
     /** 岗位ID */
     private Long postId;
 
diff --git a/src/main/java/com/ruoyi/project/system/user/domain/UserRole.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java
similarity index 87%
rename from src/main/java/com/ruoyi/project/system/user/domain/UserRole.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java
index e03990f6..ce2af2bd 100644
--- a/src/main/java/com/ruoyi/project/system/user/domain/UserRole.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.user.domain;
+package com.ruoyi.system.domain;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
@@ -8,7 +8,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
  * 
  * @author ruoyi
  */
-public class UserRole
+public class SysUserRole
 {
     /** 用户ID */
     private Long userId;
diff --git a/src/main/java/com/ruoyi/project/system/config/mapper/ConfigMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java
similarity index 66%
rename from src/main/java/com/ruoyi/project/system/config/mapper/ConfigMapper.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java
index 4d03ede1..c529a0bc 100644
--- a/src/main/java/com/ruoyi/project/system/config/mapper/ConfigMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.system.config.mapper;
+package com.ruoyi.system.mapper;
 
-import com.ruoyi.project.system.config.domain.Config;
 import java.util.List;
+import com.ruoyi.system.domain.SysConfig;
 
 /**
  * 参数配置 数据层
  * 
  * @author ruoyi
  */
-public interface ConfigMapper
+public interface SysConfigMapper
 {
     /**
      * 查询参数配置信息
@@ -16,7 +16,7 @@ public interface ConfigMapper
      * @param configId 参数配置信息
      * @return 参数配置信息
      */
-    public Config selectConfig(Config config);
+    public SysConfig selectConfig(SysConfig config);
 
     /**
      * 查询参数配置列表
@@ -24,7 +24,7 @@ public interface ConfigMapper
      * @param config 参数配置信息
      * @return 参数配置集合
      */
-    public List<Config> selectConfigList(Config config);
+    public List<SysConfig> selectConfigList(SysConfig config);
 
     /**
      * 根据键名查询参数配置信息
@@ -32,7 +32,7 @@ public interface ConfigMapper
      * @param configKey 参数键名
      * @return 参数配置信息
      */
-    public Config checkConfigKeyUnique(String configKey);
+    public SysConfig checkConfigKeyUnique(String configKey);
 
     /**
      * 新增参数配置
@@ -40,7 +40,7 @@ public interface ConfigMapper
      * @param config 参数配置信息
      * @return 结果
      */
-    public int insertConfig(Config config);
+    public int insertConfig(SysConfig config);
 
     /**
      * 修改参数配置
@@ -48,7 +48,7 @@ public interface ConfigMapper
      * @param config 参数配置信息
      * @return 结果
      */
-    public int updateConfig(Config config);
+    public int updateConfig(SysConfig config);
 
     /**
      * 批量删除参数配置
diff --git a/src/main/java/com/ruoyi/project/system/dept/mapper/DeptMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
similarity index 70%
rename from src/main/java/com/ruoyi/project/system/dept/mapper/DeptMapper.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
index ad1c80c1..b6eb9c1b 100644
--- a/src/main/java/com/ruoyi/project/system/dept/mapper/DeptMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
@@ -1,15 +1,15 @@
-package com.ruoyi.project.system.dept.mapper;
+package com.ruoyi.system.mapper;
 
 import java.util.List;
 import org.apache.ibatis.annotations.Param;
-import com.ruoyi.project.system.dept.domain.Dept;
+import com.ruoyi.system.domain.SysDept;
 
 /**
  * 部门管理 数据层
  * 
  * @author ruoyi
  */
-public interface DeptMapper
+public interface SysDeptMapper
 {
     /**
      * 查询部门人数
@@ -17,7 +17,7 @@ public interface DeptMapper
      * @param dept 部门信息
      * @return 结果
      */
-    public int selectDeptCount(Dept dept);
+    public int selectDeptCount(SysDept dept);
 
     /**
      * 查询部门是否存在用户
@@ -33,7 +33,7 @@ public interface DeptMapper
      * @param dept 部门信息
      * @return 部门信息集合
      */
-    public List<Dept> selectDeptList(Dept dept);
+    public List<SysDept> selectDeptList(SysDept dept);
 
     /**
      * 删除部门管理信息
@@ -49,7 +49,7 @@ public interface DeptMapper
      * @param dept 部门信息
      * @return 结果
      */
-    public int insertDept(Dept dept);
+    public int insertDept(SysDept dept);
 
     /**
      * 修改部门信息
@@ -57,7 +57,7 @@ public interface DeptMapper
      * @param dept 部门信息
      * @return 结果
      */
-    public int updateDept(Dept dept);
+    public int updateDept(SysDept dept);
 
     /**
      * 修改子元素关系
@@ -65,7 +65,7 @@ public interface DeptMapper
      * @param depts 子元素
      * @return 结果
      */
-    public int updateDeptChildren(@Param("depts") List<Dept> depts);
+    public int updateDeptChildren(@Param("depts") List<SysDept> depts);
 
     /**
      * 根据部门ID查询信息
@@ -73,7 +73,7 @@ public interface DeptMapper
      * @param deptId 部门ID
      * @return 部门信息
      */
-    public Dept selectDeptById(Long deptId);
+    public SysDept selectDeptById(Long deptId);
 
     /**
      * 校验部门名称是否唯一
@@ -82,7 +82,7 @@ public interface DeptMapper
      * @param parentId 父部门ID
      * @return 结果
      */
-    public Dept checkDeptNameUnique(@Param("deptName") String deptName, @Param("parentId") Long parentId);
+    public SysDept checkDeptNameUnique(@Param("deptName") String deptName, @Param("parentId") Long parentId);
 
     /**
      * 根据角色ID查询部门
diff --git a/src/main/java/com/ruoyi/project/system/dict/mapper/DictDataMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java
similarity index 78%
rename from src/main/java/com/ruoyi/project/system/dict/mapper/DictDataMapper.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java
index b21c4b1e..ad251fde 100644
--- a/src/main/java/com/ruoyi/project/system/dict/mapper/DictDataMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java
@@ -1,15 +1,15 @@
-package com.ruoyi.project.system.dict.mapper;
+package com.ruoyi.system.mapper;
 
 import java.util.List;
 import org.apache.ibatis.annotations.Param;
-import com.ruoyi.project.system.dict.domain.DictData;
+import com.ruoyi.system.domain.SysDictData;
 
 /**
  * 字典表 数据层
  * 
  * @author ruoyi
  */
-public interface DictDataMapper
+public interface SysDictDataMapper
 {
     /**
      * 根据条件分页查询字典数据
@@ -17,7 +17,7 @@ public interface DictDataMapper
      * @param dictData 字典数据信息
      * @return 字典数据集合信息
      */
-    public List<DictData> selectDictDataList(DictData dictData);
+    public List<SysDictData> selectDictDataList(SysDictData dictData);
 
     /**
      * 根据字典类型查询字典数据
@@ -25,7 +25,7 @@ public interface DictDataMapper
      * @param dictType 字典类型
      * @return 字典数据集合信息
      */
-    public List<DictData> selectDictDataByType(String dictType);
+    public List<SysDictData> selectDictDataByType(String dictType);
 
     /**
      * 根据字典类型和字典键值查询字典数据信息
@@ -42,7 +42,7 @@ public interface DictDataMapper
      * @param dictCode 字典数据ID
      * @return 字典数据
      */
-    public DictData selectDictDataById(Long dictCode);
+    public SysDictData selectDictDataById(Long dictCode);
 
     /**
      * 查询字典数据
@@ -74,7 +74,7 @@ public interface DictDataMapper
      * @param dictData 字典数据信息
      * @return 结果
      */
-    public int insertDictData(DictData dictData);
+    public int insertDictData(SysDictData dictData);
 
     /**
      * 修改字典数据信息
@@ -82,7 +82,7 @@ public interface DictDataMapper
      * @param dictData 字典数据信息
      * @return 结果
      */
-    public int updateDictData(DictData dictData);
+    public int updateDictData(SysDictData dictData);
 
     /**
      * 同步修改字典类型
diff --git a/src/main/java/com/ruoyi/project/system/dict/mapper/DictTypeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java
similarity index 69%
rename from src/main/java/com/ruoyi/project/system/dict/mapper/DictTypeMapper.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java
index af682896..b2beb212 100644
--- a/src/main/java/com/ruoyi/project/system/dict/mapper/DictTypeMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java
@@ -1,8 +1,8 @@
-package com.ruoyi.project.system.dict.mapper;
+package com.ruoyi.system.mapper;
 
 import java.util.List;
 import org.apache.ibatis.annotations.Mapper;
-import com.ruoyi.project.system.dict.domain.DictType;
+import com.ruoyi.system.domain.SysDictType;
 
 /**
  * 字典表 数据层
@@ -10,7 +10,7 @@ import com.ruoyi.project.system.dict.domain.DictType;
  * @author ruoyi
  */
 @Mapper
-public interface DictTypeMapper
+public interface SysDictTypeMapper
 {
     /**
      * 根据条件分页查询字典类型
@@ -18,14 +18,14 @@ public interface DictTypeMapper
      * @param dictType 字典类型信息
      * @return 字典类型集合信息
      */
-    public List<DictType> selectDictTypeList(DictType dictType);
+    public List<SysDictType> selectDictTypeList(SysDictType dictType);
 
     /**
      * 根据所有字典类型
      * 
      * @return 字典类型集合信息
      */
-    public List<DictType> selectDictTypeAll();
+    public List<SysDictType> selectDictTypeAll();
 
     /**
      * 根据字典类型ID查询信息
@@ -33,7 +33,7 @@ public interface DictTypeMapper
      * @param dictId 字典类型ID
      * @return 字典类型
      */
-    public DictType selectDictTypeById(Long dictId);
+    public SysDictType selectDictTypeById(Long dictId);
 
     /**
      * 通过字典ID删除字典信息
@@ -57,7 +57,7 @@ public interface DictTypeMapper
      * @param dictType 字典类型信息
      * @return 结果
      */
-    public int insertDictType(DictType dictType);
+    public int insertDictType(SysDictType dictType);
 
     /**
      * 修改字典类型信息
@@ -65,7 +65,7 @@ public interface DictTypeMapper
      * @param dictType 字典类型信息
      * @return 结果
      */
-    public int updateDictType(DictType dictType);
+    public int updateDictType(SysDictType dictType);
 
     /**
      * 校验字典类型称是否唯一
@@ -73,5 +73,5 @@ public interface DictTypeMapper
      * @param dictType 字典类型
      * @return 结果
      */
-    public DictType checkDictTypeUnique(String dictType);
+    public SysDictType checkDictTypeUnique(String dictType);
 }
diff --git a/src/main/java/com/ruoyi/project/monitor/logininfor/mapper/LogininforMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java
similarity index 64%
rename from src/main/java/com/ruoyi/project/monitor/logininfor/mapper/LogininforMapper.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java
index 50c2995d..ec96c13d 100644
--- a/src/main/java/com/ruoyi/project/monitor/logininfor/mapper/LogininforMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java
@@ -1,21 +1,21 @@
-package com.ruoyi.project.monitor.logininfor.mapper;
+package com.ruoyi.system.mapper;
 
 import java.util.List;
-import com.ruoyi.project.monitor.logininfor.domain.Logininfor;
+import com.ruoyi.system.domain.SysLogininfor;
 
 /**
  * 系统访问日志情况信息 数据层
  * 
  * @author ruoyi
  */
-public interface LogininforMapper
+public interface SysLogininforMapper
 {
     /**
      * 新增系统登录日志
      * 
      * @param logininfor 访问日志对象
      */
-    public void insertLogininfor(Logininfor logininfor);
+    public void insertLogininfor(SysLogininfor logininfor);
 
     /**
      * 查询系统登录日志集合
@@ -23,7 +23,7 @@ public interface LogininforMapper
      * @param logininfor 访问日志对象
      * @return 登录记录集合
      */
-    public List<Logininfor> selectLogininforList(Logininfor logininfor);
+    public List<SysLogininfor> selectLogininforList(SysLogininfor logininfor);
 
     /**
      * 批量删除系统登录日志
@@ -32,7 +32,7 @@ public interface LogininforMapper
      * @return
      */
     public int deleteLogininforByIds(String[] ids);
-    
+
     /**
      * 清空系统登录日志
      */
diff --git a/src/main/java/com/ruoyi/project/system/menu/mapper/MenuMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
similarity index 72%
rename from src/main/java/com/ruoyi/project/system/menu/mapper/MenuMapper.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
index acdfe7ed..eae456b1 100644
--- a/src/main/java/com/ruoyi/project/system/menu/mapper/MenuMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
@@ -1,29 +1,29 @@
-package com.ruoyi.project.system.menu.mapper;
+package com.ruoyi.system.mapper;
 
 import java.util.List;
 import org.apache.ibatis.annotations.Param;
-import com.ruoyi.project.system.menu.domain.Menu;
+import com.ruoyi.system.domain.SysMenu;
 
 /**
  * 菜单表 数据层
  * 
  * @author ruoyi
  */
-public interface MenuMapper
+public interface SysMenuMapper
 {
     /**
      * 查询系统所有菜单(含按钮)
      * 
      * @return 菜单列表
      */
-    public List<Menu> selectMenuAll();
+    public List<SysMenu> selectMenuAll();
     
     /**
      * 查询系统正常显示菜单(不含按钮)
      * 
      * @return 菜单列表
      */
-    public List<Menu> selectMenuNormalAll();
+    public List<SysMenu> selectMenuNormalAll();
     
     /**
      * 根据用户ID查询菜单
@@ -31,7 +31,7 @@ public interface MenuMapper
      * @param userId 用户ID
      * @return 菜单列表
      */
-    public List<Menu> selectMenusByUserId(Long userId);
+    public List<SysMenu> selectMenusByUserId(Long userId);
 
     /**
      * 根据用户ID查询权限
@@ -55,7 +55,7 @@ public interface MenuMapper
      * @param menu 菜单信息
      * @return 菜单列表
      */
-    public List<Menu> selectMenuList(Menu menu);
+    public List<SysMenu> selectMenuList(SysMenu menu);
 
     /**
      * 删除菜单管理信息
@@ -71,7 +71,7 @@ public interface MenuMapper
      * @param menuId 菜单ID
      * @return 菜单信息
      */
-    public Menu selectMenuById(Long menuId);
+    public SysMenu selectMenuById(Long menuId);
 
     /**
      * 查询菜单数量
@@ -87,7 +87,7 @@ public interface MenuMapper
      * @param menu 菜单信息
      * @return 结果
      */
-    public int insertMenu(Menu menu);
+    public int insertMenu(SysMenu menu);
 
     /**
      * 修改菜单信息
@@ -95,7 +95,7 @@ public interface MenuMapper
      * @param menu 菜单信息
      * @return 结果
      */
-    public int updateMenu(Menu menu);
+    public int updateMenu(SysMenu menu);
 
     /**
      * 校验菜单名称是否唯一
@@ -104,5 +104,5 @@ public interface MenuMapper
      * @param parentId 父菜单ID
      * @return 结果
      */
-    public Menu checkMenuNameUnique(@Param("menuName") String menuName, @Param("parentId") Long parentId);
+    public SysMenu checkMenuNameUnique(@Param("menuName") String menuName, @Param("parentId") Long parentId);
 }
diff --git a/src/main/java/com/ruoyi/project/system/notice/mapper/NoticeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java
similarity index 64%
rename from src/main/java/com/ruoyi/project/system/notice/mapper/NoticeMapper.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java
index f6f498f7..1ce1d8cd 100644
--- a/src/main/java/com/ruoyi/project/system/notice/mapper/NoticeMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.system.notice.mapper;
+package com.ruoyi.system.mapper;
 
-import com.ruoyi.project.system.notice.domain.Notice;
 import java.util.List;
+import com.ruoyi.system.domain.SysNotice;
 
 /**
  * 公告 数据层
  * 
  * @author ruoyi
  */
-public interface NoticeMapper
+public interface SysNoticeMapper
 {
     /**
      * 查询公告信息
@@ -16,7 +16,7 @@ public interface NoticeMapper
      * @param noticeId 公告ID
      * @return 公告信息
      */
-    public Notice selectNoticeById(Long noticeId);
+    public SysNotice selectNoticeById(Long noticeId);
 
     /**
      * 查询公告列表
@@ -24,7 +24,7 @@ public interface NoticeMapper
      * @param notice 公告信息
      * @return 公告集合
      */
-    public List<Notice> selectNoticeList(Notice notice);
+    public List<SysNotice> selectNoticeList(SysNotice notice);
 
     /**
      * 新增公告
@@ -32,7 +32,7 @@ public interface NoticeMapper
      * @param notice 公告信息
      * @return 结果
      */
-    public int insertNotice(Notice notice);
+    public int insertNotice(SysNotice notice);
 
     /**
      * 修改公告
@@ -40,7 +40,7 @@ public interface NoticeMapper
      * @param notice 公告信息
      * @return 结果
      */
-    public int updateNotice(Notice notice);
+    public int updateNotice(SysNotice notice);
 
     /**
      * 批量删除公告
diff --git a/src/main/java/com/ruoyi/project/monitor/operlog/mapper/OperLogMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java
similarity index 66%
rename from src/main/java/com/ruoyi/project/monitor/operlog/mapper/OperLogMapper.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java
index 7ffbe77c..98ca5d13 100644
--- a/src/main/java/com/ruoyi/project/monitor/operlog/mapper/OperLogMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java
@@ -1,21 +1,21 @@
-package com.ruoyi.project.monitor.operlog.mapper;
+package com.ruoyi.system.mapper;
 
 import java.util.List;
-import com.ruoyi.project.monitor.operlog.domain.OperLog;
+import com.ruoyi.system.domain.SysOperLog;
 
 /**
  * 操作日志 数据层
  * 
  * @author ruoyi
  */
-public interface OperLogMapper
+public interface SysOperLogMapper
 {
     /**
      * 新增操作日志
      * 
      * @param operLog 操作日志对象
      */
-    public void insertOperlog(OperLog operLog);
+    public void insertOperlog(SysOperLog operLog);
 
     /**
      * 查询系统操作日志集合
@@ -23,7 +23,7 @@ public interface OperLogMapper
      * @param operLog 操作日志对象
      * @return 操作日志集合
      */
-    public List<OperLog> selectOperLogList(OperLog operLog);
+    public List<SysOperLog> selectOperLogList(SysOperLog operLog);
     
     /**
      * 批量删除系统操作日志
@@ -39,7 +39,7 @@ public interface OperLogMapper
      * @param operId 操作ID
      * @return 操作日志对象
      */
-    public OperLog selectOperLogById(Long operId);
+    public SysOperLog selectOperLogById(Long operId);
     
     /**
      * 清空操作日志
diff --git a/src/main/java/com/ruoyi/project/system/post/mapper/PostMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java
similarity index 65%
rename from src/main/java/com/ruoyi/project/system/post/mapper/PostMapper.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java
index f2de38e5..a4aab595 100644
--- a/src/main/java/com/ruoyi/project/system/post/mapper/PostMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.system.post.mapper;
+package com.ruoyi.system.mapper;
 
 import java.util.List;
-import com.ruoyi.project.system.post.domain.Post;
+import com.ruoyi.system.domain.SysPost;
 
 /**
  * 岗位信息 数据层
  * 
  * @author ruoyi
  */
-public interface PostMapper
+public interface SysPostMapper
 {
     /**
      * 查询岗位数据集合
@@ -16,14 +16,14 @@ public interface PostMapper
      * @param post 岗位信息
      * @return 岗位数据集合
      */
-    public List<Post> selectPostList(Post post);
+    public List<SysPost> selectPostList(SysPost post);
 
     /**
      * 查询所有岗位
      * 
      * @return 岗位列表
      */
-    public List<Post> selectPostAll();
+    public List<SysPost> selectPostAll();
 
     /**
      * 根据用户ID查询岗位
@@ -31,7 +31,7 @@ public interface PostMapper
      * @param userId 用户ID
      * @return 岗位列表
      */
-    public List<Post> selectPostsByUserId(Long userId);
+    public List<SysPost> selectPostsByUserId(Long userId);
 
     /**
      * 通过岗位ID查询岗位信息
@@ -39,7 +39,7 @@ public interface PostMapper
      * @param postId 岗位ID
      * @return 角色对象信息
      */
-    public Post selectPostById(Long postId);
+    public SysPost selectPostById(Long postId);
 
     /**
      * 批量删除岗位信息
@@ -55,7 +55,7 @@ public interface PostMapper
      * @param post 岗位信息
      * @return 结果
      */
-    public int updatePost(Post post);
+    public int updatePost(SysPost post);
 
     /**
      * 新增岗位信息
@@ -63,7 +63,7 @@ public interface PostMapper
      * @param post 岗位信息
      * @return 结果
      */
-    public int insertPost(Post post);
+    public int insertPost(SysPost post);
 
     /**
      * 校验岗位名称
@@ -71,7 +71,7 @@ public interface PostMapper
      * @param postName 岗位名称
      * @return 结果
      */
-    public Post checkPostNameUnique(String postName);
+    public SysPost checkPostNameUnique(String postName);
 
     /**
      * 校验岗位编码
@@ -79,5 +79,5 @@ public interface PostMapper
      * @param postCode 岗位编码
      * @return 结果
      */
-    public Post checkPostCodeUnique(String postCode);
+    public SysPost checkPostCodeUnique(String postCode);
 }
diff --git a/src/main/java/com/ruoyi/project/system/role/mapper/RoleDeptMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java
similarity index 76%
rename from src/main/java/com/ruoyi/project/system/role/mapper/RoleDeptMapper.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java
index 66dba3cb..a4ad4de2 100644
--- a/src/main/java/com/ruoyi/project/system/role/mapper/RoleDeptMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.system.role.mapper;
+package com.ruoyi.system.mapper;
 
 import java.util.List;
-import com.ruoyi.project.system.role.domain.RoleDept;
+import com.ruoyi.system.domain.SysRoleDept;
 
 /**
  * 角色与部门关联表 数据层
  * 
  * @author ruoyi
  */
-public interface RoleDeptMapper
+public interface SysRoleDeptMapper
 {
     /**
      * 通过角色ID删除角色和部门关联
@@ -40,5 +40,5 @@ public interface RoleDeptMapper
      * @param roleDeptList 角色部门列表
      * @return 结果
      */
-    public int batchRoleDept(List<RoleDept> roleDeptList);
+    public int batchRoleDept(List<SysRoleDept> roleDeptList);
 }
diff --git a/src/main/java/com/ruoyi/project/system/role/mapper/RoleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
similarity index 69%
rename from src/main/java/com/ruoyi/project/system/role/mapper/RoleMapper.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
index 0cfff131..8c2ea650 100644
--- a/src/main/java/com/ruoyi/project/system/role/mapper/RoleMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.system.role.mapper;
+package com.ruoyi.system.mapper;
 
 import java.util.List;
-import com.ruoyi.project.system.role.domain.Role;
+import com.ruoyi.system.domain.SysRole;
 
 /**
  * 角色表 数据层
  * 
  * @author ruoyi
  */
-public interface RoleMapper
+public interface SysRoleMapper
 {
     /**
      * 根据条件分页查询角色数据
@@ -16,7 +16,7 @@ public interface RoleMapper
      * @param role 角色信息
      * @return 角色数据集合信息
      */
-    public List<Role> selectRoleList(Role role);
+    public List<SysRole> selectRoleList(SysRole role);
 
     /**
      * 根据用户ID查询角色
@@ -24,7 +24,7 @@ public interface RoleMapper
      * @param userId 用户ID
      * @return 角色列表
      */
-    public List<Role> selectRolesByUserId(Long userId);
+    public List<SysRole> selectRolesByUserId(Long userId);
 
     /**
      * 通过角色ID查询角色
@@ -32,7 +32,7 @@ public interface RoleMapper
      * @param roleId 角色ID
      * @return 角色对象信息
      */
-    public Role selectRoleById(Long roleId);
+    public SysRole selectRoleById(Long roleId);
 
     /**
      * 通过角色ID删除角色
@@ -56,7 +56,7 @@ public interface RoleMapper
      * @param role 角色信息
      * @return 结果
      */
-    public int updateRole(Role role);
+    public int updateRole(SysRole role);
 
     /**
      * 新增角色信息
@@ -64,7 +64,7 @@ public interface RoleMapper
      * @param role 角色信息
      * @return 结果
      */
-    public int insertRole(Role role);
+    public int insertRole(SysRole role);
 
     /**
      * 校验角色名称是否唯一
@@ -72,7 +72,7 @@ public interface RoleMapper
      * @param roleName 角色名称
      * @return 角色信息
      */
-    public Role checkRoleNameUnique(String roleName);
+    public SysRole checkRoleNameUnique(String roleName);
     
     /**
      * 校验角色权限是否唯一
@@ -80,5 +80,5 @@ public interface RoleMapper
      * @param roleKey 角色权限
      * @return 角色信息
      */
-    public Role checkRoleKeyUnique(String roleKey);
+    public SysRole checkRoleKeyUnique(String roleKey);
 }
diff --git a/src/main/java/com/ruoyi/project/system/role/mapper/RoleMenuMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java
similarity index 76%
rename from src/main/java/com/ruoyi/project/system/role/mapper/RoleMenuMapper.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java
index 6d05898c..5ed98f29 100644
--- a/src/main/java/com/ruoyi/project/system/role/mapper/RoleMenuMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.system.role.mapper;
+package com.ruoyi.system.mapper;
 
 import java.util.List;
-import com.ruoyi.project.system.role.domain.RoleMenu;
+import com.ruoyi.system.domain.SysRoleMenu;
 
 /**
  * 角色与菜单关联表 数据层
  * 
  * @author ruoyi
  */
-public interface RoleMenuMapper
+public interface SysRoleMenuMapper
 {
     /**
      * 通过角色ID删除角色和菜单关联
@@ -40,5 +40,5 @@ public interface RoleMenuMapper
      * @param roleMenuList 角色菜单列表
      * @return 结果
      */
-    public int batchRoleMenu(List<RoleMenu> roleMenuList);
+    public int batchRoleMenu(List<SysRoleMenu> roleMenuList);
 }
diff --git a/src/main/java/com/ruoyi/project/system/user/mapper/UserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
similarity index 70%
rename from src/main/java/com/ruoyi/project/system/user/mapper/UserMapper.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
index 184c3839..397ccd12 100644
--- a/src/main/java/com/ruoyi/project/system/user/mapper/UserMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.system.user.mapper;
+package com.ruoyi.system.mapper;
 
-import com.ruoyi.project.system.user.domain.User;
 import java.util.List;
+import com.ruoyi.system.domain.SysUser;
 
 /**
  * 用户表 数据层
  * 
  * @author ruoyi
  */
-public interface UserMapper
+public interface SysUserMapper
 {
     /**
      * 根据条件分页查询用户对象
@@ -16,7 +16,7 @@ public interface UserMapper
      * @param user 用户信息
      * @return 用户信息集合信息
      */
-    public List<User> selectUserList(User user);
+    public List<SysUser> selectUserList(SysUser sysUser);
 
     /**
      * 通过用户名查询用户
@@ -24,7 +24,7 @@ public interface UserMapper
      * @param userName 用户名
      * @return 用户对象信息
      */
-    public User selectUserByLoginName(String userName);
+    public SysUser selectUserByLoginName(String userName);
 
     /**
      * 通过手机号码查询用户
@@ -32,7 +32,7 @@ public interface UserMapper
      * @param phoneNumber 手机号码
      * @return 用户对象信息
      */
-    public User selectUserByPhoneNumber(String phoneNumber);
+    public SysUser selectUserByPhoneNumber(String phoneNumber);
 
     /**
      * 通过邮箱查询用户
@@ -40,7 +40,7 @@ public interface UserMapper
      * @param email 邮箱
      * @return 用户对象信息
      */
-    public User selectUserByEmail(String email);
+    public SysUser selectUserByEmail(String email);
 
     /**
      * 通过用户ID查询用户
@@ -48,7 +48,7 @@ public interface UserMapper
      * @param userId 用户ID
      * @return 用户对象信息
      */
-    public User selectUserById(Long userId);
+    public SysUser selectUserById(Long userId);
 
     /**
      * 通过用户ID删除用户
@@ -72,7 +72,7 @@ public interface UserMapper
      * @param user 用户信息
      * @return 结果
      */
-    public int updateUser(User user);
+    public int updateUser(SysUser user);
 
     /**
      * 新增用户信息
@@ -80,7 +80,7 @@ public interface UserMapper
      * @param user 用户信息
      * @return 结果
      */
-    public int insertUser(User user);
+    public int insertUser(SysUser user);
 
     /**
      * 校验用户名称是否唯一
@@ -96,7 +96,7 @@ public interface UserMapper
      * @param phonenumber 手机号码
      * @return 结果
      */
-    public User checkPhoneUnique(String phonenumber);
+    public SysUser checkPhoneUnique(String phonenumber);
 
     /**
      * 校验email是否唯一
@@ -104,5 +104,5 @@ public interface UserMapper
      * @param email 用户邮箱
      * @return 结果
      */
-    public User checkEmailUnique(String email);
+    public SysUser checkEmailUnique(String email);
 }
diff --git a/src/main/java/com/ruoyi/project/monitor/online/mapper/UserOnlineMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserOnlineMapper.java
similarity index 62%
rename from src/main/java/com/ruoyi/project/monitor/online/mapper/UserOnlineMapper.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserOnlineMapper.java
index 32f4caa4..c6bf94cd 100644
--- a/src/main/java/com/ruoyi/project/monitor/online/mapper/UserOnlineMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserOnlineMapper.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.monitor.online.mapper;
+package com.ruoyi.system.mapper;
 
 import java.util.List;
-import com.ruoyi.project.monitor.online.domain.UserOnline;
+import com.ruoyi.system.domain.SysUserOnline;
 
 /**
  * 在线用户 数据层
  * 
  * @author ruoyi
  */
-public interface UserOnlineMapper
+public interface SysUserOnlineMapper
 {
     /**
      * 通过会话序号查询信息
@@ -16,7 +16,7 @@ public interface UserOnlineMapper
      * @param sessionId 会话ID
      * @return 在线用户信息
      */
-    public UserOnline selectOnlineById(String sessionId);
+    public SysUserOnline selectOnlineById(String sessionId);
 
     /**
      * 通过会话序号删除信息
@@ -32,7 +32,7 @@ public interface UserOnlineMapper
      * @param online 会话信息
      * @return 结果
      */
-    public int saveOnline(UserOnline online);
+    public int saveOnline(SysUserOnline online);
 
     /**
      * 查询会话集合
@@ -40,7 +40,7 @@ public interface UserOnlineMapper
      * @param userOnline 会话参数
      * @return 会话集合
      */
-    public List<UserOnline> selectUserOnlineList(UserOnline userOnline);
+    public List<SysUserOnline> selectUserOnlineList(SysUserOnline userOnline);
 
     /**
      * 查询过期会话集合
@@ -48,5 +48,5 @@ public interface UserOnlineMapper
      * @param lastAccessTime 过期时间
      * @return 会话集合
      */
-    public List<UserOnline> selectOnlineByExpired(String lastAccessTime);
+    public List<SysUserOnline> selectOnlineByExpired(String lastAccessTime);
 }
diff --git a/src/main/java/com/ruoyi/project/system/user/mapper/UserPostMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java
similarity index 76%
rename from src/main/java/com/ruoyi/project/system/user/mapper/UserPostMapper.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java
index 4ecd6682..d2e8e7e5 100644
--- a/src/main/java/com/ruoyi/project/system/user/mapper/UserPostMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.system.user.mapper;
+package com.ruoyi.system.mapper;
 
 import java.util.List;
-import com.ruoyi.project.system.user.domain.UserPost;
+import com.ruoyi.system.domain.SysUserPost;
 
 /**
  * 用户与岗位 表 数据层
  * 
  * @author ruoyi
  */
-public interface UserPostMapper
+public interface SysUserPostMapper
 {
     /**
      * 通过用户ID删除用户和岗位关联
@@ -40,5 +40,5 @@ public interface UserPostMapper
      * @param userPostList 用户角色列表
      * @return 结果
      */
-    public int batchUserPost(List<UserPost> userPostList);
+    public int batchUserPost(List<SysUserPost> userPostList);
 }
diff --git a/src/main/java/com/ruoyi/project/system/user/mapper/UserRoleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java
similarity index 75%
rename from src/main/java/com/ruoyi/project/system/user/mapper/UserRoleMapper.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java
index b9805a43..d27eaf96 100644
--- a/src/main/java/com/ruoyi/project/system/user/mapper/UserRoleMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.system.user.mapper;
+package com.ruoyi.system.mapper;
 
 import java.util.List;
-import com.ruoyi.project.system.user.domain.UserRole;
+import com.ruoyi.system.domain.SysUserRole;
 
 /**
  * 用户表 数据层
  * 
  * @author ruoyi
  */
-public interface UserRoleMapper
+public interface SysUserRoleMapper
 {
     /**
      * 通过用户ID删除用户和角色关联
@@ -40,5 +40,5 @@ public interface UserRoleMapper
      * @param userRoleList 用户角色列表
      * @return 结果
      */
-    public int batchUserRole(List<UserRole> userRoleList);
+    public int batchUserRole(List<SysUserRole> userRoleList);
 }
diff --git a/src/main/java/com/ruoyi/project/system/config/service/IConfigService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java
similarity index 69%
rename from src/main/java/com/ruoyi/project/system/config/service/IConfigService.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java
index a2dd3502..949bf44c 100644
--- a/src/main/java/com/ruoyi/project/system/config/service/IConfigService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.system.config.service;
+package com.ruoyi.system.service;
 
-import com.ruoyi.project.system.config.domain.Config;
 import java.util.List;
+import com.ruoyi.system.domain.SysConfig;
 
 /**
  * 参数配置 服务层
  * 
  * @author ruoyi
  */
-public interface IConfigService
+public interface ISysConfigService
 {
     /**
      * 查询参数配置信息
@@ -16,7 +16,7 @@ public interface IConfigService
      * @param configId 参数配置ID
      * @return 参数配置信息
      */
-    public Config selectConfigById(Long configId);
+    public SysConfig selectConfigById(Long configId);
 
     /**
      * 根据键名查询参数配置信息
@@ -32,7 +32,7 @@ public interface IConfigService
      * @param config 参数配置信息
      * @return 参数配置集合
      */
-    public List<Config> selectConfigList(Config config);
+    public List<SysConfig> selectConfigList(SysConfig config);
 
     /**
      * 新增参数配置
@@ -40,7 +40,7 @@ public interface IConfigService
      * @param config 参数配置信息
      * @return 结果
      */
-    public int insertConfig(Config config);
+    public int insertConfig(SysConfig config);
 
     /**
      * 修改参数配置
@@ -48,7 +48,7 @@ public interface IConfigService
      * @param config 参数配置信息
      * @return 结果
      */
-    public int updateConfig(Config config);
+    public int updateConfig(SysConfig config);
 
     /**
      * 批量删除参数配置信息
@@ -64,5 +64,5 @@ public interface IConfigService
      * @param config 参数信息
      * @return 结果
      */
-    public String checkConfigKeyUnique(Config config);
+    public String checkConfigKeyUnique(SysConfig config);
 }
diff --git a/src/main/java/com/ruoyi/project/system/dept/service/IDeptService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java
similarity index 72%
rename from src/main/java/com/ruoyi/project/system/dept/service/IDeptService.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java
index 42eb1503..f8f3e375 100644
--- a/src/main/java/com/ruoyi/project/system/dept/service/IDeptService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java
@@ -1,17 +1,16 @@
-package com.ruoyi.project.system.dept.service;
+package com.ruoyi.system.service;
 
 import java.util.List;
 import java.util.Map;
-
-import com.ruoyi.project.system.dept.domain.Dept;
-import com.ruoyi.project.system.role.domain.Role;
+import com.ruoyi.system.domain.SysDept;
+import com.ruoyi.system.domain.SysRole;
 
 /**
  * 部门管理 服务层
  * 
  * @author ruoyi
  */
-public interface IDeptService
+public interface ISysDeptService
 {
     /**
      * 查询部门管理数据
@@ -19,7 +18,7 @@ public interface IDeptService
      * @param dept 部门信息
      * @return 部门信息集合
      */
-    public List<Dept> selectDeptList(Dept dept);
+    public List<SysDept> selectDeptList(SysDept dept);
 
     /**
      * 查询部门管理树
@@ -34,7 +33,7 @@ public interface IDeptService
      * @param role 角色对象
      * @return 菜单列表
      */
-    public List<Map<String, Object>> roleDeptTreeData(Role role);
+    public List<Map<String, Object>> roleDeptTreeData(SysRole role);
 
     /**
      * 查询部门人数
@@ -66,7 +65,7 @@ public interface IDeptService
      * @param dept 部门信息
      * @return 结果
      */
-    public int insertDept(Dept dept);
+    public int insertDept(SysDept dept);
 
     /**
      * 修改保存部门信息
@@ -74,7 +73,7 @@ public interface IDeptService
      * @param dept 部门信息
      * @return 结果
      */
-    public int updateDept(Dept dept);
+    public int updateDept(SysDept dept);
 
     /**
      * 根据部门ID查询信息
@@ -82,7 +81,7 @@ public interface IDeptService
      * @param deptId 部门ID
      * @return 部门信息
      */
-    public Dept selectDeptById(Long deptId);
+    public SysDept selectDeptById(Long deptId);
 
     /**
      * 校验部门名称是否唯一
@@ -90,5 +89,5 @@ public interface IDeptService
      * @param dept 部门信息
      * @return 结果
      */
-    public String checkDeptNameUnique(Dept dept);
+    public String checkDeptNameUnique(SysDept dept);
 }
diff --git a/src/main/java/com/ruoyi/project/system/dict/service/IDictDataService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java
similarity index 73%
rename from src/main/java/com/ruoyi/project/system/dict/service/IDictDataService.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java
index 1ef4ff0c..68d68d81 100644
--- a/src/main/java/com/ruoyi/project/system/dict/service/IDictDataService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.system.dict.service;
+package com.ruoyi.system.service;
 
 import java.util.List;
-import com.ruoyi.project.system.dict.domain.DictData;
+import com.ruoyi.system.domain.SysDictData;
 
 /**
  * 字典 业务层
  * 
  * @author ruoyi
  */
-public interface IDictDataService
+public interface ISysDictDataService
 {
     /**
      * 根据条件分页查询字典数据
@@ -16,7 +16,7 @@ public interface IDictDataService
      * @param dictData 字典数据信息
      * @return 字典数据集合信息
      */
-    public List<DictData> selectDictDataList(DictData dictData);
+    public List<SysDictData> selectDictDataList(SysDictData dictData);
 
     /**
      * 根据字典类型查询字典数据
@@ -24,7 +24,7 @@ public interface IDictDataService
      * @param dictType 字典类型
      * @return 字典数据集合信息
      */
-    public List<DictData> selectDictDataByType(String dictType);
+    public List<SysDictData> selectDictDataByType(String dictType);
 
     /**
      * 根据字典类型和字典键值查询字典数据信息
@@ -41,7 +41,7 @@ public interface IDictDataService
      * @param dictCode 字典数据ID
      * @return 字典数据
      */
-    public DictData selectDictDataById(Long dictCode);
+    public SysDictData selectDictDataById(Long dictCode);
 
     /**
      * 通过字典ID删除字典数据信息
@@ -65,7 +65,7 @@ public interface IDictDataService
      * @param dictData 字典数据信息
      * @return 结果
      */
-    public int insertDictData(DictData dictData);
+    public int insertDictData(SysDictData dictData);
 
     /**
      * 修改保存字典数据信息
@@ -73,5 +73,5 @@ public interface IDictDataService
      * @param dictData 字典数据信息
      * @return 结果
      */
-    public int updateDictData(DictData dictData);
+    public int updateDictData(SysDictData dictData);
 }
diff --git a/src/main/java/com/ruoyi/project/system/dict/service/IDictTypeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java
similarity index 69%
rename from src/main/java/com/ruoyi/project/system/dict/service/IDictTypeService.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java
index b37b7d42..0039de63 100644
--- a/src/main/java/com/ruoyi/project/system/dict/service/IDictTypeService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.system.dict.service;
+package com.ruoyi.system.service;
 
 import java.util.List;
-import com.ruoyi.project.system.dict.domain.DictType;
+import com.ruoyi.system.domain.SysDictType;
 
 /**
  * 字典 业务层
  * 
  * @author ruoyi
  */
-public interface IDictTypeService
+public interface ISysDictTypeService
 {
     /**
      * 根据条件分页查询字典类型
@@ -16,14 +16,14 @@ public interface IDictTypeService
      * @param dictType 字典类型信息
      * @return 字典类型集合信息
      */
-    public List<DictType> selectDictTypeList(DictType dictType);
+    public List<SysDictType> selectDictTypeList(SysDictType dictType);
 
     /**
      * 根据所有字典类型
      * 
      * @return 字典类型集合信息
      */
-    public List<DictType> selectDictTypeAll();
+    public List<SysDictType> selectDictTypeAll();
 
     /**
      * 根据字典类型ID查询信息
@@ -31,7 +31,7 @@ public interface IDictTypeService
      * @param dictId 字典类型ID
      * @return 字典类型
      */
-    public DictType selectDictTypeById(Long dictId);
+    public SysDictType selectDictTypeById(Long dictId);
 
     /**
      * 通过字典ID删除字典信息
@@ -56,7 +56,7 @@ public interface IDictTypeService
      * @param dictType 字典类型信息
      * @return 结果
      */
-    public int insertDictType(DictType dictType);
+    public int insertDictType(SysDictType dictType);
 
     /**
      * 修改保存字典类型信息
@@ -64,7 +64,7 @@ public interface IDictTypeService
      * @param dictType 字典类型信息
      * @return 结果
      */
-    public int updateDictType(DictType dictType);
+    public int updateDictType(SysDictType dictType);
 
     /**
      * 校验字典类型称是否唯一
@@ -72,5 +72,5 @@ public interface IDictTypeService
      * @param dictType 字典类型
      * @return 结果
      */
-    public String checkDictTypeUnique(DictType dictType);
+    public String checkDictTypeUnique(SysDictType dictType);
 }
diff --git a/src/main/java/com/ruoyi/project/monitor/logininfor/service/ILogininforService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java
similarity index 64%
rename from src/main/java/com/ruoyi/project/monitor/logininfor/service/ILogininforService.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java
index 14ccce8f..8e292c25 100644
--- a/src/main/java/com/ruoyi/project/monitor/logininfor/service/ILogininforService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java
@@ -1,21 +1,21 @@
-package com.ruoyi.project.monitor.logininfor.service;
+package com.ruoyi.system.service;
 
 import java.util.List;
-import com.ruoyi.project.monitor.logininfor.domain.Logininfor;
+import com.ruoyi.system.domain.SysLogininfor;
 
 /**
  * 系统访问日志情况信息 服务层
  * 
  * @author ruoyi
  */
-public interface ILogininforService
+public interface ISysLogininforService
 {
     /**
      * 新增系统登录日志
      * 
      * @param logininfor 访问日志对象
      */
-    public void insertLogininfor(Logininfor logininfor);
+    public void insertLogininfor(SysLogininfor logininfor);
 
     /**
      * 查询系统登录日志集合
@@ -23,7 +23,7 @@ public interface ILogininforService
      * @param logininfor 访问日志对象
      * @return 登录记录集合
      */
-    public List<Logininfor> selectLogininforList(Logininfor logininfor);
+    public List<SysLogininfor> selectLogininforList(SysLogininfor logininfor);
 
     /**
      * 批量删除系统登录日志
@@ -32,7 +32,7 @@ public interface ILogininforService
      * @return
      */
     public int deleteLogininforByIds(String ids);
-    
+
     /**
      * 清空系统登录日志
      */
diff --git a/src/main/java/com/ruoyi/project/system/menu/service/IMenuService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java
similarity index 72%
rename from src/main/java/com/ruoyi/project/system/menu/service/IMenuService.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java
index bfd498a5..cc626691 100644
--- a/src/main/java/com/ruoyi/project/system/menu/service/IMenuService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java
@@ -1,18 +1,18 @@
-package com.ruoyi.project.system.menu.service;
+package com.ruoyi.system.service;
 
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import com.ruoyi.project.system.menu.domain.Menu;
-import com.ruoyi.project.system.role.domain.Role;
-import com.ruoyi.project.system.user.domain.User;
+import com.ruoyi.system.domain.SysMenu;
+import com.ruoyi.system.domain.SysRole;
+import com.ruoyi.system.domain.SysUser;
 
 /**
  * 菜单 业务层
  * 
  * @author ruoyi
  */
-public interface IMenuService
+public interface ISysMenuService
 {
     /**
      * 根据用户ID查询菜单
@@ -20,7 +20,7 @@ public interface IMenuService
      * @param user 用户信息
      * @return 菜单列表
      */
-    public List<Menu> selectMenusByUser(User user);
+    public List<SysMenu> selectMenusByUser(SysUser user);
 
     /**
      * 查询系统菜单列表
@@ -28,14 +28,14 @@ public interface IMenuService
      * @param menu 菜单信息
      * @return 菜单列表
      */
-    public List<Menu> selectMenuList(Menu menu);
+    public List<SysMenu> selectMenuList(SysMenu menu);
 
     /**
      * 查询菜单集合
      * 
      * @return 所有菜单信息
      */
-    public List<Menu> selectMenuAll();
+    public List<SysMenu> selectMenuAll();
 
     /**
      * 根据用户ID查询权限
@@ -51,7 +51,7 @@ public interface IMenuService
      * @param role 角色对象
      * @return 菜单列表
      */
-    public List<Map<String, Object>> roleMenuTreeData(Role role);
+    public List<Map<String, Object>> roleMenuTreeData(SysRole role);
 
     /**
      * 查询所有菜单信息
@@ -81,7 +81,7 @@ public interface IMenuService
      * @param menuId 菜单ID
      * @return 菜单信息
      */
-    public Menu selectMenuById(Long menuId);
+    public SysMenu selectMenuById(Long menuId);
 
     /**
      * 查询菜单数量
@@ -105,7 +105,7 @@ public interface IMenuService
      * @param menu 菜单信息
      * @return 结果
      */
-    public int insertMenu(Menu menu);
+    public int insertMenu(SysMenu menu);
 
     /**
      * 修改保存菜单信息
@@ -113,7 +113,7 @@ public interface IMenuService
      * @param menu 菜单信息
      * @return 结果
      */
-    public int updateMenu(Menu menu);
+    public int updateMenu(SysMenu menu);
 
     /**
      * 校验菜单名称是否唯一
@@ -121,5 +121,5 @@ public interface IMenuService
      * @param menu 菜单信息
      * @return 结果
      */
-    public String checkMenuNameUnique(Menu menu);
+    public String checkMenuNameUnique(SysMenu menu);
 }
diff --git a/src/main/java/com/ruoyi/project/system/notice/service/INoticeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java
similarity index 63%
rename from src/main/java/com/ruoyi/project/system/notice/service/INoticeService.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java
index 96276bc8..abd6d7af 100644
--- a/src/main/java/com/ruoyi/project/system/notice/service/INoticeService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.system.notice.service;
+package com.ruoyi.system.service;
 
-import com.ruoyi.project.system.notice.domain.Notice;
 import java.util.List;
+import com.ruoyi.system.domain.SysNotice;
 
 /**
  * 公告 服务层
  * 
  * @author ruoyi
  */
-public interface INoticeService
+public interface ISysNoticeService
 {
     /**
      * 查询公告信息
@@ -16,7 +16,7 @@ public interface INoticeService
      * @param noticeId 公告ID
      * @return 公告信息
      */
-    public Notice selectNoticeById(Long noticeId);
+    public SysNotice selectNoticeById(Long noticeId);
 
     /**
      * 查询公告列表
@@ -24,7 +24,7 @@ public interface INoticeService
      * @param notice 公告信息
      * @return 公告集合
      */
-    public List<Notice> selectNoticeList(Notice notice);
+    public List<SysNotice> selectNoticeList(SysNotice notice);
 
     /**
      * 新增公告
@@ -32,7 +32,7 @@ public interface INoticeService
      * @param notice 公告信息
      * @return 结果
      */
-    public int insertNotice(Notice notice);
+    public int insertNotice(SysNotice notice);
 
     /**
      * 修改公告
@@ -40,7 +40,7 @@ public interface INoticeService
      * @param notice 公告信息
      * @return 结果
      */
-    public int updateNotice(Notice notice);
+    public int updateNotice(SysNotice notice);
 
     /**
      * 删除公告信息
diff --git a/src/main/java/com/ruoyi/project/monitor/operlog/service/IOperLogService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java
similarity index 65%
rename from src/main/java/com/ruoyi/project/monitor/operlog/service/IOperLogService.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java
index f4dcdff9..61efe602 100644
--- a/src/main/java/com/ruoyi/project/monitor/operlog/service/IOperLogService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java
@@ -1,21 +1,21 @@
-package com.ruoyi.project.monitor.operlog.service;
+package com.ruoyi.system.service;
 
 import java.util.List;
-import com.ruoyi.project.monitor.operlog.domain.OperLog;
+import com.ruoyi.system.domain.SysOperLog;
 
 /**
  * 操作日志 服务层
  * 
  * @author ruoyi
  */
-public interface IOperLogService
+public interface ISysOperLogService
 {
     /**
      * 新增操作日志
      * 
      * @param operLog 操作日志对象
      */
-    public void insertOperlog(OperLog operLog);
+    public void insertOperlog(SysOperLog operLog);
 
     /**
      * 查询系统操作日志集合
@@ -23,7 +23,7 @@ public interface IOperLogService
      * @param operLog 操作日志对象
      * @return 操作日志集合
      */
-    public List<OperLog> selectOperLogList(OperLog operLog);
+    public List<SysOperLog> selectOperLogList(SysOperLog operLog);
 
     /**
      * 批量删除系统操作日志
@@ -39,8 +39,8 @@ public interface IOperLogService
      * @param operId 操作ID
      * @return 操作日志对象
      */
-    public OperLog selectOperLogById(Long operId);
-    
+    public SysOperLog selectOperLogById(Long operId);
+
     /**
      * 清空操作日志
      */
diff --git a/src/main/java/com/ruoyi/project/system/post/service/IPostService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java
similarity index 69%
rename from src/main/java/com/ruoyi/project/system/post/service/IPostService.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java
index 93edd60c..bbf7b784 100644
--- a/src/main/java/com/ruoyi/project/system/post/service/IPostService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.system.post.service;
+package com.ruoyi.system.service;
 
 import java.util.List;
-import com.ruoyi.project.system.post.domain.Post;
+import com.ruoyi.system.domain.SysPost;
 
 /**
  * 岗位信息 服务层
  * 
  * @author ruoyi
  */
-public interface IPostService
+public interface ISysPostService
 {
     /**
      * 查询岗位信息集合
@@ -16,14 +16,14 @@ public interface IPostService
      * @param post 岗位信息
      * @return 岗位信息集合
      */
-    public List<Post> selectPostList(Post post);
+    public List<SysPost> selectPostList(SysPost post);
 
     /**
      * 查询所有岗位
      * 
      * @return 岗位列表
      */
-    public List<Post> selectPostAll();
+    public List<SysPost> selectPostAll();
 
     /**
      * 根据用户ID查询岗位
@@ -31,7 +31,7 @@ public interface IPostService
      * @param userId 用户ID
      * @return 岗位列表
      */
-    public List<Post> selectPostsByUserId(Long userId);
+    public List<SysPost> selectPostsByUserId(Long userId);
 
     /**
      * 通过岗位ID查询岗位信息
@@ -39,7 +39,7 @@ public interface IPostService
      * @param postId 岗位ID
      * @return 角色对象信息
      */
-    public Post selectPostById(Long postId);
+    public SysPost selectPostById(Long postId);
 
     /**
      * 批量删除岗位信息
@@ -56,7 +56,7 @@ public interface IPostService
      * @param post 岗位信息
      * @return 结果
      */
-    public int insertPost(Post post);
+    public int insertPost(SysPost post);
 
     /**
      * 修改保存岗位信息
@@ -64,7 +64,7 @@ public interface IPostService
      * @param post 岗位信息
      * @return 结果
      */
-    public int updatePost(Post post);
+    public int updatePost(SysPost post);
 
     /**
      * 通过岗位ID查询岗位使用数量
@@ -80,7 +80,7 @@ public interface IPostService
      * @param post 岗位信息
      * @return 结果
      */
-    public String checkPostNameUnique(Post post);
+    public String checkPostNameUnique(SysPost post);
 
     /**
      * 校验岗位编码
@@ -88,5 +88,5 @@ public interface IPostService
      * @param post 岗位信息
      * @return 结果
      */
-    public String checkPostCodeUnique(Post post);
+    public String checkPostCodeUnique(SysPost post);
 }
diff --git a/src/main/java/com/ruoyi/project/system/role/service/IRoleService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java
similarity index 73%
rename from src/main/java/com/ruoyi/project/system/role/service/IRoleService.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java
index 383e086f..8f5853d2 100644
--- a/src/main/java/com/ruoyi/project/system/role/service/IRoleService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java
@@ -1,15 +1,15 @@
-package com.ruoyi.project.system.role.service;
+package com.ruoyi.system.service;
 
 import java.util.List;
 import java.util.Set;
-import com.ruoyi.project.system.role.domain.Role;
+import com.ruoyi.system.domain.SysRole;
 
 /**
  * 角色业务层
  * 
  * @author ruoyi
  */
-public interface IRoleService
+public interface ISysRoleService
 {
     /**
      * 根据条件分页查询角色数据
@@ -17,7 +17,7 @@ public interface IRoleService
      * @param role 角色信息
      * @return 角色数据集合信息
      */
-    public List<Role> selectRoleList(Role role);
+    public List<SysRole> selectRoleList(SysRole role);
 
     /**
      * 根据用户ID查询角色
@@ -33,14 +33,14 @@ public interface IRoleService
      * @param userId 用户ID
      * @return 角色列表
      */
-    public List<Role> selectRolesByUserId(Long userId);
+    public List<SysRole> selectRolesByUserId(Long userId);
 
     /**
      * 查询所有角色
      * 
      * @return 角色列表
      */
-    public List<Role> selectRoleAll();
+    public List<SysRole> selectRoleAll();
 
     /**
      * 通过角色ID查询角色
@@ -48,7 +48,7 @@ public interface IRoleService
      * @param roleId 角色ID
      * @return 角色对象信息
      */
-    public Role selectRoleById(Long roleId);
+    public SysRole selectRoleById(Long roleId);
 
     /**
      * 通过角色ID删除角色
@@ -73,7 +73,7 @@ public interface IRoleService
      * @param role 角色信息
      * @return 结果
      */
-    public int insertRole(Role role);
+    public int insertRole(SysRole role);
 
     /**
      * 修改保存角色信息
@@ -81,15 +81,15 @@ public interface IRoleService
      * @param role 角色信息
      * @return 结果
      */
-    public int updateRole(Role role);
-    
+    public int updateRole(SysRole role);
+
     /**
      * 修改数据权限信息
      * 
      * @param role 角色信息
      * @return 结果
      */
-    public int updateRule(Role role);
+    public int updateRule(SysRole role);
 
     /**
      * 校验角色名称是否唯一
@@ -97,15 +97,15 @@ public interface IRoleService
      * @param role 角色信息
      * @return 结果
      */
-    public String checkRoleNameUnique(Role role);
-    
+    public String checkRoleNameUnique(SysRole role);
+
     /**
      * 校验角色权限是否唯一
      * 
      * @param role 角色信息
      * @return 结果
      */
-    public String checkRoleKeyUnique(Role role);
+    public String checkRoleKeyUnique(SysRole role);
 
     /**
      * 通过角色ID查询角色使用数量
diff --git a/src/main/java/com/ruoyi/project/monitor/online/service/IUserOnlineService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOnlineService.java
similarity index 69%
rename from src/main/java/com/ruoyi/project/monitor/online/service/IUserOnlineService.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOnlineService.java
index dd2ffea9..1ed90806 100644
--- a/src/main/java/com/ruoyi/project/monitor/online/service/IUserOnlineService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOnlineService.java
@@ -1,15 +1,15 @@
-package com.ruoyi.project.monitor.online.service;
+package com.ruoyi.system.service;
 
 import java.util.Date;
 import java.util.List;
-import com.ruoyi.project.monitor.online.domain.UserOnline;
+import com.ruoyi.system.domain.SysUserOnline;
 
 /**
  * 在线用户 服务层
  * 
  * @author ruoyi
  */
-public interface IUserOnlineService
+public interface ISysUserOnlineService
 {
     /**
      * 通过会话序号查询信息
@@ -17,7 +17,7 @@ public interface IUserOnlineService
      * @param sessionId 会话ID
      * @return 在线用户信息
      */
-    public UserOnline selectOnlineById(String sessionId);
+    public SysUserOnline selectOnlineById(String sessionId);
 
     /**
      * 通过会话序号删除信息
@@ -40,7 +40,7 @@ public interface IUserOnlineService
      * 
      * @param online 会话信息
      */
-    public void saveOnline(UserOnline online);
+    public void saveOnline(SysUserOnline online);
 
     /**
      * 查询会话集合
@@ -48,7 +48,7 @@ public interface IUserOnlineService
      * @param userOnline 分页参数
      * @return 会话集合
      */
-    public List<UserOnline> selectUserOnlineList(UserOnline userOnline);
+    public List<SysUserOnline> selectUserOnlineList(SysUserOnline userOnline);
 
     /**
      * 强退用户
@@ -63,5 +63,5 @@ public interface IUserOnlineService
      * @param expiredDate 有效期
      * @return 会话集合
      */
-    public List<UserOnline> selectOnlineByExpired(Date expiredDate);
+    public List<SysUserOnline> selectOnlineByExpired(Date expiredDate);
 }
diff --git a/src/main/java/com/ruoyi/project/system/user/service/IUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
similarity index 74%
rename from src/main/java/com/ruoyi/project/system/user/service/IUserService.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
index 9200dd51..bdff6ee2 100644
--- a/src/main/java/com/ruoyi/project/system/user/service/IUserService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -1,14 +1,14 @@
-package com.ruoyi.project.system.user.service;
+package com.ruoyi.system.service;
 
-import com.ruoyi.project.system.user.domain.User;
 import java.util.List;
+import com.ruoyi.system.domain.SysUser;
 
 /**
  * 用户 业务层
  * 
  * @author ruoyi
  */
-public interface IUserService
+public interface ISysUserService
 {
     /**
      * 根据条件分页查询用户对象
@@ -16,7 +16,7 @@ public interface IUserService
      * @param user 用户信息
      * @return 用户信息集合信息
      */
-    public List<User> selectUserList(User user);
+    public List<SysUser> selectUserList(SysUser user);
 
     /**
      * 通过用户名查询用户
@@ -24,7 +24,7 @@ public interface IUserService
      * @param userName 用户名
      * @return 用户对象信息
      */
-    public User selectUserByLoginName(String userName);
+    public SysUser selectUserByLoginName(String userName);
 
     /**
      * 通过手机号码查询用户
@@ -32,7 +32,7 @@ public interface IUserService
      * @param phoneNumber 手机号码
      * @return 用户对象信息
      */
-    public User selectUserByPhoneNumber(String phoneNumber);
+    public SysUser selectUserByPhoneNumber(String phoneNumber);
 
     /**
      * 通过邮箱查询用户
@@ -40,7 +40,7 @@ public interface IUserService
      * @param email 邮箱
      * @return 用户对象信息
      */
-    public User selectUserByEmail(String email);
+    public SysUser selectUserByEmail(String email);
 
     /**
      * 通过用户ID查询用户
@@ -48,7 +48,7 @@ public interface IUserService
      * @param userId 用户ID
      * @return 用户对象信息
      */
-    public User selectUserById(Long userId);
+    public SysUser selectUserById(Long userId);
 
     /**
      * 通过用户ID删除用户
@@ -73,7 +73,7 @@ public interface IUserService
      * @param user 用户信息
      * @return 结果
      */
-    public int insertUser(User user);
+    public int insertUser(SysUser user);
 
     /**
      * 保存用户信息
@@ -81,7 +81,7 @@ public interface IUserService
      * @param user 用户信息
      * @return 结果
      */
-    public int updateUser(User user);
+    public int updateUser(SysUser user);
 
     /**
      * 修改用户详细信息
@@ -89,7 +89,7 @@ public interface IUserService
      * @param user 用户信息
      * @return 结果
      */
-    public int updateUserInfo(User user);
+    public int updateUserInfo(SysUser user);
 
     /**
      * 修改用户密码信息
@@ -97,7 +97,7 @@ public interface IUserService
      * @param user 用户信息
      * @return 结果
      */
-    public int resetUserPwd(User user);
+    public int resetUserPwd(SysUser user);
 
     /**
      * 校验用户名称是否唯一
@@ -113,7 +113,7 @@ public interface IUserService
      * @param user 用户信息
      * @return 结果
      */
-    public String checkPhoneUnique(User user);
+    public String checkPhoneUnique(SysUser user);
 
     /**
      * 校验email是否唯一
@@ -121,7 +121,7 @@ public interface IUserService
      * @param user 用户信息
      * @return 结果
      */
-    public String checkEmailUnique(User user);
+    public String checkEmailUnique(SysUser user);
 
     /**
      * 根据用户ID查询用户所属角色组
diff --git a/src/main/java/com/ruoyi/project/system/config/service/ConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
similarity index 69%
rename from src/main/java/com/ruoyi/project/system/config/service/ConfigServiceImpl.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
index 5b48aac2..de25aec4 100644
--- a/src/main/java/com/ruoyi/project/system/config/service/ConfigServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.config.service;
+package com.ruoyi.system.service.impl;
 
 import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -6,9 +6,9 @@ import org.springframework.stereotype.Service;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.support.Convert;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.security.ShiroUtils;
-import com.ruoyi.project.system.config.domain.Config;
-import com.ruoyi.project.system.config.mapper.ConfigMapper;
+import com.ruoyi.system.domain.SysConfig;
+import com.ruoyi.system.mapper.SysConfigMapper;
+import com.ruoyi.system.service.ISysConfigService;
 
 /**
  * 参数配置 服务层实现
@@ -16,10 +16,10 @@ import com.ruoyi.project.system.config.mapper.ConfigMapper;
  * @author ruoyi
  */
 @Service
-public class ConfigServiceImpl implements IConfigService
+public class SysConfigServiceImpl implements ISysConfigService
 {
     @Autowired
-    private ConfigMapper configMapper;
+    private SysConfigMapper configMapper;
 
     /**
      * 查询参数配置信息
@@ -28,9 +28,9 @@ public class ConfigServiceImpl implements IConfigService
      * @return 参数配置信息
      */
     @Override
-    public Config selectConfigById(Long configId)
+    public SysConfig selectConfigById(Long configId)
     {
-        Config config = new Config();
+        SysConfig config = new SysConfig();
         config.setConfigId(configId);
         return configMapper.selectConfig(config);
     }
@@ -44,9 +44,9 @@ public class ConfigServiceImpl implements IConfigService
     @Override
     public String selectConfigByKey(String configKey)
     {
-        Config config = new Config();
+        SysConfig config = new SysConfig();
         config.setConfigKey(configKey);
-        Config retConfig = configMapper.selectConfig(config);
+        SysConfig retConfig = configMapper.selectConfig(config);
         return StringUtils.isNotNull(retConfig) ? retConfig.getConfigValue() : "";
     }
 
@@ -57,7 +57,7 @@ public class ConfigServiceImpl implements IConfigService
      * @return 参数配置集合
      */
     @Override
-    public List<Config> selectConfigList(Config config)
+    public List<SysConfig> selectConfigList(SysConfig config)
     {
         return configMapper.selectConfigList(config);
     }
@@ -69,9 +69,8 @@ public class ConfigServiceImpl implements IConfigService
      * @return 结果
      */
     @Override
-    public int insertConfig(Config config)
+    public int insertConfig(SysConfig config)
     {
-        config.setCreateBy(ShiroUtils.getLoginName());
         return configMapper.insertConfig(config);
     }
 
@@ -82,9 +81,8 @@ public class ConfigServiceImpl implements IConfigService
      * @return 结果
      */
     @Override
-    public int updateConfig(Config config)
+    public int updateConfig(SysConfig config)
     {
-        config.setUpdateBy(ShiroUtils.getLoginName());
         return configMapper.updateConfig(config);
     }
 
@@ -107,10 +105,10 @@ public class ConfigServiceImpl implements IConfigService
      * @return 结果
      */
     @Override
-    public String checkConfigKeyUnique(Config config)
+    public String checkConfigKeyUnique(SysConfig config)
     {
         Long configId = StringUtils.isNull(config.getConfigId()) ? -1L : config.getConfigId();
-        Config info = configMapper.checkConfigKeyUnique(config.getConfigKey());
+        SysConfig info = configMapper.checkConfigKeyUnique(config.getConfigKey());
         if (StringUtils.isNotNull(info) && info.getConfigId().longValue() != configId.longValue())
         {
             return UserConstants.CONFIG_KEY_NOT_UNIQUE;
diff --git a/src/main/java/com/ruoyi/project/system/dept/service/DeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
similarity index 75%
rename from src/main/java/com/ruoyi/project/system/dept/service/DeptServiceImpl.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
index c42cb8bf..57e33944 100644
--- a/src/main/java/com/ruoyi/project/system/dept/service/DeptServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.dept.service;
+package com.ruoyi.system.service.impl;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -6,13 +6,13 @@ import java.util.List;
 import java.util.Map;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import com.ruoyi.common.annotation.DataScope;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.security.ShiroUtils;
-import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
-import com.ruoyi.project.system.dept.domain.Dept;
-import com.ruoyi.project.system.dept.mapper.DeptMapper;
-import com.ruoyi.project.system.role.domain.Role;
+import com.ruoyi.system.domain.SysDept;
+import com.ruoyi.system.domain.SysRole;
+import com.ruoyi.system.mapper.SysDeptMapper;
+import com.ruoyi.system.service.ISysDeptService;
 
 /**
  * 部门管理 服务实现
@@ -20,10 +20,10 @@ import com.ruoyi.project.system.role.domain.Role;
  * @author ruoyi
  */
 @Service
-public class DeptServiceImpl implements IDeptService
+public class SysDeptServiceImpl implements ISysDeptService
 {
     @Autowired
-    private DeptMapper deptMapper;
+    private SysDeptMapper deptMapper;
 
     /**
      * 查询部门管理数据
@@ -32,7 +32,7 @@ public class DeptServiceImpl implements IDeptService
      */
     @Override
     @DataScope(tableAlias = "d")
-    public List<Dept> selectDeptList(Dept dept)
+    public List<SysDept> selectDeptList(SysDept dept)
     {
         return deptMapper.selectDeptList(dept);
     }
@@ -46,7 +46,7 @@ public class DeptServiceImpl implements IDeptService
     public List<Map<String, Object>> selectDeptTree()
     {
         List<Map<String, Object>> trees = new ArrayList<Map<String, Object>>();
-        List<Dept> deptList = selectDeptList(new Dept());
+        List<SysDept> deptList = selectDeptList(new SysDept());
         trees = getTrees(deptList, false, null);
         return trees;
     }
@@ -58,11 +58,11 @@ public class DeptServiceImpl implements IDeptService
      * @return 部门列表(数据权限)
      */
     @Override
-    public List<Map<String, Object>> roleDeptTreeData(Role role)
+    public List<Map<String, Object>> roleDeptTreeData(SysRole role)
     {
         Long roleId = role.getRoleId();
         List<Map<String, Object>> trees = new ArrayList<Map<String, Object>>();
-        List<Dept> deptList = selectDeptList(new Dept());
+        List<SysDept> deptList = selectDeptList(new SysDept());
         if (StringUtils.isNotNull(roleId))
         {
             List<String> roleDeptList = deptMapper.selectRoleDeptTree(roleId);
@@ -83,11 +83,11 @@ public class DeptServiceImpl implements IDeptService
      * @param roleDeptList 角色已存在菜单列表
      * @return
      */
-    public List<Map<String, Object>> getTrees(List<Dept> deptList, boolean isCheck, List<String> roleDeptList)
+    public List<Map<String, Object>> getTrees(List<SysDept> deptList, boolean isCheck, List<String> roleDeptList)
     {
 
         List<Map<String, Object>> trees = new ArrayList<Map<String, Object>>();
-        for (Dept dept : deptList)
+        for (SysDept dept : deptList)
         {
             if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()))
             {
@@ -119,7 +119,7 @@ public class DeptServiceImpl implements IDeptService
     @Override
     public int selectDeptCount(Long parentId)
     {
-        Dept dept = new Dept();
+        SysDept dept = new SysDept();
         dept.setParentId(parentId);
         return deptMapper.selectDeptCount(dept);
     }
@@ -156,10 +156,9 @@ public class DeptServiceImpl implements IDeptService
      * @return 结果
      */
     @Override
-    public int insertDept(Dept dept)
+    public int insertDept(SysDept dept)
     {
-        Dept info = deptMapper.selectDeptById(dept.getParentId());
-        dept.setCreateBy(ShiroUtils.getLoginName());
+        SysDept info = deptMapper.selectDeptById(dept.getParentId());
         dept.setAncestors(info.getAncestors() + "," + dept.getParentId());
         return deptMapper.insertDept(dept);
     }
@@ -171,11 +170,10 @@ public class DeptServiceImpl implements IDeptService
      * @return 结果
      */
     @Override
-    public int updateDept(Dept dept)
+    public int updateDept(SysDept dept)
     {
-        Dept info = deptMapper.selectDeptById(dept.getParentId());
+        SysDept info = deptMapper.selectDeptById(dept.getParentId());
         String ancestors = info.getAncestors() + "," + dept.getParentId();
-        dept.setUpdateBy(ShiroUtils.getLoginName());
         dept.setAncestors(ancestors);
         updateDeptChildren(dept.getDeptId(), ancestors);
         return deptMapper.updateDept(dept);
@@ -189,10 +187,10 @@ public class DeptServiceImpl implements IDeptService
      */
     public void updateDeptChildren(Long deptId, String ancestors)
     {
-        Dept dept = new Dept();
+        SysDept dept = new SysDept();
         dept.setParentId(deptId);
-        List<Dept> childrens = deptMapper.selectDeptList(dept);
-        for (Dept children : childrens)
+        List<SysDept> childrens = deptMapper.selectDeptList(dept);
+        for (SysDept children : childrens)
         {
             children.setAncestors(ancestors + "," + dept.getParentId());
         }
@@ -209,7 +207,7 @@ public class DeptServiceImpl implements IDeptService
      * @return 部门信息
      */
     @Override
-    public Dept selectDeptById(Long deptId)
+    public SysDept selectDeptById(Long deptId)
     {
         return deptMapper.selectDeptById(deptId);
     }
@@ -221,10 +219,10 @@ public class DeptServiceImpl implements IDeptService
      * @return 结果
      */
     @Override
-    public String checkDeptNameUnique(Dept dept)
+    public String checkDeptNameUnique(SysDept dept)
     {
         Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId();
-        Dept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId());
+        SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId());
         if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue())
         {
             return UserConstants.DEPT_NAME_NOT_UNIQUE;
diff --git a/src/main/java/com/ruoyi/project/system/dict/service/DictDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
similarity index 73%
rename from src/main/java/com/ruoyi/project/system/dict/service/DictDataServiceImpl.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
index 0be11bb3..4f8ae61d 100644
--- a/src/main/java/com/ruoyi/project/system/dict/service/DictDataServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
@@ -1,12 +1,12 @@
-package com.ruoyi.project.system.dict.service;
+package com.ruoyi.system.service.impl;
 
 import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.common.support.Convert;
-import com.ruoyi.common.utils.security.ShiroUtils;
-import com.ruoyi.project.system.dict.domain.DictData;
-import com.ruoyi.project.system.dict.mapper.DictDataMapper;
+import com.ruoyi.system.domain.SysDictData;
+import com.ruoyi.system.mapper.SysDictDataMapper;
+import com.ruoyi.system.service.ISysDictDataService;
 
 /**
  * 字典 业务层处理
@@ -14,10 +14,10 @@ import com.ruoyi.project.system.dict.mapper.DictDataMapper;
  * @author ruoyi
  */
 @Service
-public class DictDataServiceImpl implements IDictDataService
+public class SysDictDataServiceImpl implements ISysDictDataService
 {
     @Autowired
-    private DictDataMapper dictDataMapper;
+    private SysDictDataMapper dictDataMapper;
 
     /**
      * 根据条件分页查询字典数据
@@ -26,7 +26,7 @@ public class DictDataServiceImpl implements IDictDataService
      * @return 字典数据集合信息
      */
     @Override
-    public List<DictData> selectDictDataList(DictData dictData)
+    public List<SysDictData> selectDictDataList(SysDictData dictData)
     {
         return dictDataMapper.selectDictDataList(dictData);
     }
@@ -38,7 +38,7 @@ public class DictDataServiceImpl implements IDictDataService
      * @return 字典数据集合信息
      */
     @Override
-    public List<DictData> selectDictDataByType(String dictType)
+    public List<SysDictData> selectDictDataByType(String dictType)
     {
         return dictDataMapper.selectDictDataByType(dictType);
     }
@@ -63,7 +63,7 @@ public class DictDataServiceImpl implements IDictDataService
      * @return 字典数据
      */
     @Override
-    public DictData selectDictDataById(Long dictCode)
+    public SysDictData selectDictDataById(Long dictCode)
     {
         return dictDataMapper.selectDictDataById(dictCode);
     }
@@ -99,9 +99,8 @@ public class DictDataServiceImpl implements IDictDataService
      * @return 结果
      */
     @Override
-    public int insertDictData(DictData dictData)
+    public int insertDictData(SysDictData dictData)
     {
-        dictData.setCreateBy(ShiroUtils.getLoginName());
         return dictDataMapper.insertDictData(dictData);
     }
 
@@ -112,9 +111,8 @@ public class DictDataServiceImpl implements IDictDataService
      * @return 结果
      */
     @Override
-    public int updateDictData(DictData dictData)
+    public int updateDictData(SysDictData dictData)
     {
-        dictData.setUpdateBy(ShiroUtils.getLoginName());
         return dictDataMapper.updateDictData(dictData);
     }
 }
diff --git a/src/main/java/com/ruoyi/project/system/dict/service/DictTypeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
similarity index 69%
rename from src/main/java/com/ruoyi/project/system/dict/service/DictTypeServiceImpl.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
index 8bf77919..fa3d2340 100644
--- a/src/main/java/com/ruoyi/project/system/dict/service/DictTypeServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.dict.service;
+package com.ruoyi.system.service.impl;
 
 import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -6,10 +6,10 @@ import org.springframework.stereotype.Service;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.support.Convert;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.security.ShiroUtils;
-import com.ruoyi.project.system.dict.domain.DictType;
-import com.ruoyi.project.system.dict.mapper.DictDataMapper;
-import com.ruoyi.project.system.dict.mapper.DictTypeMapper;
+import com.ruoyi.system.domain.SysDictType;
+import com.ruoyi.system.mapper.SysDictDataMapper;
+import com.ruoyi.system.mapper.SysDictTypeMapper;
+import com.ruoyi.system.service.ISysDictTypeService;
 
 /**
  * 字典 业务层处理
@@ -17,13 +17,13 @@ import com.ruoyi.project.system.dict.mapper.DictTypeMapper;
  * @author ruoyi
  */
 @Service
-public class DictTypeServiceImpl implements IDictTypeService
+public class SysDictTypeServiceImpl implements ISysDictTypeService
 {
     @Autowired
-    private DictTypeMapper dictTypeMapper;
+    private SysDictTypeMapper dictTypeMapper;
 
     @Autowired
-    private DictDataMapper dictDataMapper;
+    private SysDictDataMapper dictDataMapper;
 
     /**
      * 根据条件分页查询字典类型
@@ -32,7 +32,7 @@ public class DictTypeServiceImpl implements IDictTypeService
      * @return 字典类型集合信息
      */
     @Override
-    public List<DictType> selectDictTypeList(DictType dictType)
+    public List<SysDictType> selectDictTypeList(SysDictType dictType)
     {
         return dictTypeMapper.selectDictTypeList(dictType);
     }
@@ -43,7 +43,7 @@ public class DictTypeServiceImpl implements IDictTypeService
      * @return 字典类型集合信息
      */
     @Override
-    public List<DictType> selectDictTypeAll()
+    public List<SysDictType> selectDictTypeAll()
     {
         return dictTypeMapper.selectDictTypeAll();
     }
@@ -55,7 +55,7 @@ public class DictTypeServiceImpl implements IDictTypeService
      * @return 字典类型
      */
     @Override
-    public DictType selectDictTypeById(Long dictId)
+    public SysDictType selectDictTypeById(Long dictId)
     {
         return dictTypeMapper.selectDictTypeById(dictId);
     }
@@ -84,7 +84,7 @@ public class DictTypeServiceImpl implements IDictTypeService
         Long[] dictIds = Convert.toLongArray(ids);
         for (Long dictId : dictIds)
         {
-            DictType dictType = selectDictTypeById(dictId);
+            SysDictType dictType = selectDictTypeById(dictId);
             if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0)
             {
                 throw new Exception(String.format("%1$s已分配,不能删除", dictType.getDictName()));
@@ -101,9 +101,8 @@ public class DictTypeServiceImpl implements IDictTypeService
      * @return 结果
      */
     @Override
-    public int insertDictType(DictType dictType)
+    public int insertDictType(SysDictType dictType)
     {
-        dictType.setCreateBy(ShiroUtils.getLoginName());
         return dictTypeMapper.insertDictType(dictType);
     }
 
@@ -114,10 +113,9 @@ public class DictTypeServiceImpl implements IDictTypeService
      * @return 结果
      */
     @Override
-    public int updateDictType(DictType dictType)
+    public int updateDictType(SysDictType dictType)
     {
-        dictType.setUpdateBy(ShiroUtils.getLoginName());
-        DictType oldDict = dictTypeMapper.selectDictTypeById(dictType.getDictId());
+        SysDictType oldDict = dictTypeMapper.selectDictTypeById(dictType.getDictId());
         dictDataMapper.updateDictDataType(oldDict.getDictType(), dictType.getDictType());
         return dictTypeMapper.updateDictType(dictType);
     }
@@ -129,10 +127,10 @@ public class DictTypeServiceImpl implements IDictTypeService
      * @return 结果
      */
     @Override
-    public String checkDictTypeUnique(DictType dict)
+    public String checkDictTypeUnique(SysDictType dict)
     {
         Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId();
-        DictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType());
+        SysDictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType());
         if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue())
         {
             return UserConstants.DICT_TYPE_NOT_UNIQUE;
diff --git a/src/main/java/com/ruoyi/project/monitor/logininfor/service/LogininforServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java
similarity index 68%
rename from src/main/java/com/ruoyi/project/monitor/logininfor/service/LogininforServiceImpl.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java
index e34c92ee..ca9f868c 100644
--- a/src/main/java/com/ruoyi/project/monitor/logininfor/service/LogininforServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java
@@ -1,11 +1,12 @@
-package com.ruoyi.project.monitor.logininfor.service;
+package com.ruoyi.system.service.impl;
 
 import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.common.support.Convert;
-import com.ruoyi.project.monitor.logininfor.domain.Logininfor;
-import com.ruoyi.project.monitor.logininfor.mapper.LogininforMapper;
+import com.ruoyi.system.domain.SysLogininfor;
+import com.ruoyi.system.mapper.SysLogininforMapper;
+import com.ruoyi.system.service.ISysLogininforService;
 
 /**
  * 系统访问日志情况信息 服务层处理
@@ -13,10 +14,11 @@ import com.ruoyi.project.monitor.logininfor.mapper.LogininforMapper;
  * @author ruoyi
  */
 @Service
-public class LogininforServiceImpl implements ILogininforService
+public class SysLogininforServiceImpl implements ISysLogininforService
 {
+
     @Autowired
-    private LogininforMapper logininforMapper;
+    private SysLogininforMapper logininforMapper;
 
     /**
      * 新增系统登录日志
@@ -24,7 +26,7 @@ public class LogininforServiceImpl implements ILogininforService
      * @param logininfor 访问日志对象
      */
     @Override
-    public void insertLogininfor(Logininfor logininfor)
+    public void insertLogininfor(SysLogininfor logininfor)
     {
         logininforMapper.insertLogininfor(logininfor);
     }
@@ -36,7 +38,7 @@ public class LogininforServiceImpl implements ILogininforService
      * @return 登录记录集合
      */
     @Override
-    public List<Logininfor> selectLogininforList(Logininfor logininfor)
+    public List<SysLogininfor> selectLogininforList(SysLogininfor logininfor)
     {
         return logininforMapper.selectLogininforList(logininfor);
     }
@@ -52,7 +54,7 @@ public class LogininforServiceImpl implements ILogininforService
     {
         return logininforMapper.deleteLogininforByIds(Convert.toStrArray(ids));
     }
-    
+
     /**
      * 清空系统登录日志
      */
diff --git a/src/main/java/com/ruoyi/project/system/menu/service/MenuServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
similarity index 61%
rename from src/main/java/com/ruoyi/project/system/menu/service/MenuServiceImpl.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
index 023e3d85..c07a0375 100644
--- a/src/main/java/com/ruoyi/project/system/menu/service/MenuServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
@@ -1,10 +1,11 @@
-package com.ruoyi.project.system.menu.service;
+package com.ruoyi.system.service.impl;
 
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
@@ -14,13 +15,12 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.TreeUtils;
-import com.ruoyi.common.utils.security.ShiroUtils;
-import com.ruoyi.project.system.menu.domain.Menu;
-import com.ruoyi.project.system.menu.mapper.MenuMapper;
-import com.ruoyi.project.system.role.domain.Role;
-import com.ruoyi.project.system.role.mapper.RoleMenuMapper;
-import com.ruoyi.project.system.user.domain.User;
+import com.ruoyi.system.domain.SysMenu;
+import com.ruoyi.system.domain.SysRole;
+import com.ruoyi.system.domain.SysUser;
+import com.ruoyi.system.mapper.SysMenuMapper;
+import com.ruoyi.system.mapper.SysRoleMenuMapper;
+import com.ruoyi.system.service.ISysMenuService;
 
 /**
  * 菜单 业务层处理
@@ -28,15 +28,15 @@ import com.ruoyi.project.system.user.domain.User;
  * @author ruoyi
  */
 @Service
-public class MenuServiceImpl implements IMenuService
+public class SysMenuServiceImpl implements ISysMenuService
 {
     public static final String PREMISSION_STRING = "perms[\"{0}\"]";
 
     @Autowired
-    private MenuMapper menuMapper;
+    private SysMenuMapper menuMapper;
 
     @Autowired
-    private RoleMenuMapper roleMenuMapper;
+    private SysRoleMenuMapper roleMenuMapper;
 
     /**
      * 根据用户查询菜单
@@ -45,9 +45,9 @@ public class MenuServiceImpl implements IMenuService
      * @return 菜单列表
      */
     @Override
-    public List<Menu> selectMenusByUser(User user)
+    public List<SysMenu> selectMenusByUser(SysUser user)
     {
-        List<Menu> menus = new LinkedList<Menu>();
+        List<SysMenu> menus = new LinkedList<SysMenu>();
         // 管理员显示所有菜单信息
         if (user.isAdmin())
         {
@@ -57,7 +57,7 @@ public class MenuServiceImpl implements IMenuService
         {
             menus = menuMapper.selectMenusByUserId(user.getUserId());
         }
-        return TreeUtils.getChildPerms(menus, 0);
+        return getChildPerms(menus, 0);
     }
 
     /**
@@ -66,7 +66,7 @@ public class MenuServiceImpl implements IMenuService
      * @return 所有菜单信息
      */
     @Override
-    public List<Menu> selectMenuList(Menu menu)
+    public List<SysMenu> selectMenuList(SysMenu menu)
     {
         return menuMapper.selectMenuList(menu);
     }
@@ -77,7 +77,7 @@ public class MenuServiceImpl implements IMenuService
      * @return 所有菜单信息
      */
     @Override
-    public List<Menu> selectMenuAll()
+    public List<SysMenu> selectMenuAll()
     {
         return menuMapper.selectMenuAll();
     }
@@ -110,11 +110,11 @@ public class MenuServiceImpl implements IMenuService
      * @return 菜单列表
      */
     @Override
-    public List<Map<String, Object>> roleMenuTreeData(Role role)
+    public List<Map<String, Object>> roleMenuTreeData(SysRole role)
     {
         Long roleId = role.getRoleId();
         List<Map<String, Object>> trees = new ArrayList<Map<String, Object>>();
-        List<Menu> menuList = menuMapper.selectMenuAll();
+        List<SysMenu> menuList = menuMapper.selectMenuAll();
         if (StringUtils.isNotNull(roleId))
         {
             List<String> roleMenuList = menuMapper.selectMenuTree(roleId);
@@ -136,7 +136,7 @@ public class MenuServiceImpl implements IMenuService
     public List<Map<String, Object>> menuTreeData()
     {
         List<Map<String, Object>> trees = new ArrayList<Map<String, Object>>();
-        List<Menu> menuList = menuMapper.selectMenuAll();
+        List<SysMenu> menuList = menuMapper.selectMenuAll();
         trees = getTrees(menuList, false, null, false);
         return trees;
     }
@@ -150,10 +150,10 @@ public class MenuServiceImpl implements IMenuService
     public LinkedHashMap<String, String> selectPermsAll()
     {
         LinkedHashMap<String, String> section = new LinkedHashMap<>();
-        List<Menu> permissions = menuMapper.selectMenuAll();
+        List<SysMenu> permissions = menuMapper.selectMenuAll();
         if (StringUtils.isNotEmpty(permissions))
         {
-            for (Menu menu : permissions)
+            for (SysMenu menu : permissions)
             {
                 section.put(menu.getUrl(), MessageFormat.format(PREMISSION_STRING, menu.getPerms()));
             }
@@ -170,11 +170,11 @@ public class MenuServiceImpl implements IMenuService
      * @param permsFlag 是否需要显示权限标识
      * @return
      */
-    public List<Map<String, Object>> getTrees(List<Menu> menuList, boolean isCheck, List<String> roleMenuList,
+    public List<Map<String, Object>> getTrees(List<SysMenu> menuList, boolean isCheck, List<String> roleMenuList,
             boolean permsFlag)
     {
         List<Map<String, Object>> trees = new ArrayList<Map<String, Object>>();
-        for (Menu menu : menuList)
+        for (SysMenu menu : menuList)
         {
             Map<String, Object> deptMap = new HashMap<String, Object>();
             deptMap.put("id", menu.getMenuId());
@@ -194,7 +194,7 @@ public class MenuServiceImpl implements IMenuService
         return trees;
     }
 
-    public String transMenuName(Menu menu, List<String> roleMenuList, boolean permsFlag)
+    public String transMenuName(SysMenu menu, List<String> roleMenuList, boolean permsFlag)
     {
         StringBuffer sb = new StringBuffer();
         sb.append(menu.getMenuName());
@@ -214,7 +214,6 @@ public class MenuServiceImpl implements IMenuService
     @Override
     public int deleteMenuById(Long menuId)
     {
-        ShiroUtils.clearCachedAuthorizationInfo();
         return menuMapper.deleteMenuById(menuId);
     }
 
@@ -225,7 +224,7 @@ public class MenuServiceImpl implements IMenuService
      * @return 菜单信息
      */
     @Override
-    public Menu selectMenuById(Long menuId)
+    public SysMenu selectMenuById(Long menuId)
     {
         return menuMapper.selectMenuById(menuId);
     }
@@ -261,10 +260,8 @@ public class MenuServiceImpl implements IMenuService
      * @return 结果
      */
     @Override
-    public int insertMenu(Menu menu)
+    public int insertMenu(SysMenu menu)
     {
-        menu.setCreateBy(ShiroUtils.getLoginName());
-        ShiroUtils.clearCachedAuthorizationInfo();
         return menuMapper.insertMenu(menu);
     }
 
@@ -275,10 +272,8 @@ public class MenuServiceImpl implements IMenuService
      * @return 结果
      */
     @Override
-    public int updateMenu(Menu menu)
+    public int updateMenu(SysMenu menu)
     {
-        menu.setUpdateBy(ShiroUtils.getLoginName());
-        ShiroUtils.clearCachedAuthorizationInfo();
         return menuMapper.updateMenu(menu);
     }
 
@@ -289,14 +284,89 @@ public class MenuServiceImpl implements IMenuService
      * @return 结果
      */
     @Override
-    public String checkMenuNameUnique(Menu menu)
+    public String checkMenuNameUnique(SysMenu menu)
     {
         Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId();
-        Menu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId());
+        SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId());
         if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue())
         {
             return UserConstants.MENU_NAME_NOT_UNIQUE;
         }
         return UserConstants.MENU_NAME_UNIQUE;
     }
+
+    /**
+     * 根据父节点的ID获取所有子节点
+     * 
+     * @param list 分类表
+     * @param typeId 传入的父节点ID
+     * @return String
+     */
+    public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId)
+    {
+        List<SysMenu> returnList = new ArrayList<SysMenu>();
+        for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext();)
+        {
+            SysMenu t = (SysMenu) iterator.next();
+            // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
+            if (t.getParentId() == parentId)
+            {
+                recursionFn(list, t);
+                returnList.add(t);
+            }
+        }
+        return returnList;
+    }
+
+    /**
+     * 递归列表
+     * 
+     * @param list
+     * @param SysMenu
+     */
+    private void recursionFn(List<SysMenu> list, SysMenu t)
+    {
+        // 得到子节点列表
+        List<SysMenu> childList = getChildList(list, t);
+        t.setChildren(childList);
+        for (SysMenu tChild : childList)
+        {
+            if (hasChild(list, tChild))
+            {
+                // 判断是否有子节点
+                Iterator<SysMenu> it = childList.iterator();
+                while (it.hasNext())
+                {
+                    SysMenu n = (SysMenu) it.next();
+                    recursionFn(list, n);
+                }
+            }
+        }
+    }
+
+    /**
+     * 得到子节点列表
+     */
+    private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t)
+    {
+        List<SysMenu> tlist = new ArrayList<SysMenu>();
+        Iterator<SysMenu> it = list.iterator();
+        while (it.hasNext())
+        {
+            SysMenu n = (SysMenu) it.next();
+            if (n.getParentId().longValue() == t.getMenuId().longValue())
+            {
+                tlist.add(n);
+            }
+        }
+        return tlist;
+    }
+
+    /**
+     * 判断是否有子节点
+     */
+    private boolean hasChild(List<SysMenu> list, SysMenu t)
+    {
+        return getChildList(list, t).size() > 0 ? true : false;
+    }
 }
diff --git a/src/main/java/com/ruoyi/project/system/notice/service/NoticeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java
similarity index 62%
rename from src/main/java/com/ruoyi/project/system/notice/service/NoticeServiceImpl.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java
index ff01f3c6..c8895a31 100644
--- a/src/main/java/com/ruoyi/project/system/notice/service/NoticeServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java
@@ -1,13 +1,12 @@
-package com.ruoyi.project.system.notice.service;
+package com.ruoyi.system.service.impl;
 
 import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.ruoyi.common.utils.security.ShiroUtils;
-import com.ruoyi.project.system.notice.mapper.NoticeMapper;
-import com.ruoyi.project.system.notice.domain.Notice;
-import com.ruoyi.project.system.notice.service.INoticeService;
 import com.ruoyi.common.support.Convert;
+import com.ruoyi.system.domain.SysNotice;
+import com.ruoyi.system.mapper.SysNoticeMapper;
+import com.ruoyi.system.service.ISysNoticeService;
 
 /**
  * 公告 服务层实现
@@ -16,10 +15,10 @@ import com.ruoyi.common.support.Convert;
  * @date 2018-06-25
  */
 @Service
-public class NoticeServiceImpl implements INoticeService
+public class SysNoticeServiceImpl implements ISysNoticeService
 {
     @Autowired
-    private NoticeMapper noticeMapper;
+    private SysNoticeMapper noticeMapper;
 
     /**
      * 查询公告信息
@@ -28,7 +27,7 @@ public class NoticeServiceImpl implements INoticeService
      * @return 公告信息
      */
     @Override
-    public Notice selectNoticeById(Long noticeId)
+    public SysNotice selectNoticeById(Long noticeId)
     {
         return noticeMapper.selectNoticeById(noticeId);
     }
@@ -40,7 +39,7 @@ public class NoticeServiceImpl implements INoticeService
      * @return 公告集合
      */
     @Override
-    public List<Notice> selectNoticeList(Notice notice)
+    public List<SysNotice> selectNoticeList(SysNotice notice)
     {
         return noticeMapper.selectNoticeList(notice);
     }
@@ -52,9 +51,8 @@ public class NoticeServiceImpl implements INoticeService
      * @return 结果
      */
     @Override
-    public int insertNotice(Notice notice)
+    public int insertNotice(SysNotice notice)
     {
-        notice.setCreateBy(ShiroUtils.getLoginName());
         return noticeMapper.insertNotice(notice);
     }
 
@@ -65,9 +63,8 @@ public class NoticeServiceImpl implements INoticeService
      * @return 结果
      */
     @Override
-    public int updateNotice(Notice notice)
+    public int updateNotice(SysNotice notice)
     {
-        notice.setUpdateBy(ShiroUtils.getLoginName());
         return noticeMapper.updateNotice(notice);
     }
 
diff --git a/src/main/java/com/ruoyi/project/monitor/operlog/service/OperLogServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java
similarity index 69%
rename from src/main/java/com/ruoyi/project/monitor/operlog/service/OperLogServiceImpl.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java
index 21abb930..e8609abb 100644
--- a/src/main/java/com/ruoyi/project/monitor/operlog/service/OperLogServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java
@@ -1,11 +1,12 @@
-package com.ruoyi.project.monitor.operlog.service;
+package com.ruoyi.system.service.impl;
 
 import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.common.support.Convert;
-import com.ruoyi.project.monitor.operlog.domain.OperLog;
-import com.ruoyi.project.monitor.operlog.mapper.OperLogMapper;
+import com.ruoyi.system.domain.SysOperLog;
+import com.ruoyi.system.mapper.SysOperLogMapper;
+import com.ruoyi.system.service.ISysOperLogService;
 
 /**
  * 操作日志 服务层处理
@@ -13,10 +14,10 @@ import com.ruoyi.project.monitor.operlog.mapper.OperLogMapper;
  * @author ruoyi
  */
 @Service
-public class OperLogServiceImpl implements IOperLogService
+public class SysOperLogServiceImpl implements ISysOperLogService
 {
     @Autowired
-    private OperLogMapper operLogMapper;
+    private SysOperLogMapper operLogMapper;
 
     /**
      * 新增操作日志
@@ -24,7 +25,7 @@ public class OperLogServiceImpl implements IOperLogService
      * @param operLog 操作日志对象
      */
     @Override
-    public void insertOperlog(OperLog operLog)
+    public void insertOperlog(SysOperLog operLog)
     {
         operLogMapper.insertOperlog(operLog);
     }
@@ -36,7 +37,7 @@ public class OperLogServiceImpl implements IOperLogService
      * @return 操作日志集合
      */
     @Override
-    public List<OperLog> selectOperLogList(OperLog operLog)
+    public List<SysOperLog> selectOperLogList(SysOperLog operLog)
     {
         return operLogMapper.selectOperLogList(operLog);
     }
@@ -60,11 +61,11 @@ public class OperLogServiceImpl implements IOperLogService
      * @return 操作日志对象
      */
     @Override
-    public OperLog selectOperLogById(Long operId)
+    public SysOperLog selectOperLogById(Long operId)
     {
         return operLogMapper.selectOperLogById(operId);
     }
-    
+
     /**
      * 清空操作日志
      */
diff --git a/src/main/java/com/ruoyi/project/system/post/service/PostServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java
similarity index 70%
rename from src/main/java/com/ruoyi/project/system/post/service/PostServiceImpl.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java
index a9900fcc..a88513ab 100644
--- a/src/main/java/com/ruoyi/project/system/post/service/PostServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java
@@ -1,4 +1,4 @@
-package com.ruoyi.project.system.post.service;
+package com.ruoyi.system.service.impl;
 
 import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -6,10 +6,10 @@ import org.springframework.stereotype.Service;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.support.Convert;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.security.ShiroUtils;
-import com.ruoyi.project.system.post.domain.Post;
-import com.ruoyi.project.system.post.mapper.PostMapper;
-import com.ruoyi.project.system.user.mapper.UserPostMapper;
+import com.ruoyi.system.domain.SysPost;
+import com.ruoyi.system.mapper.SysPostMapper;
+import com.ruoyi.system.mapper.SysUserPostMapper;
+import com.ruoyi.system.service.ISysPostService;
 
 /**
  * 岗位信息 服务层处理
@@ -17,13 +17,13 @@ import com.ruoyi.project.system.user.mapper.UserPostMapper;
  * @author ruoyi
  */
 @Service
-public class PostServiceImpl implements IPostService
+public class SysPostServiceImpl implements ISysPostService
 {
     @Autowired
-    private PostMapper postMapper;
+    private SysPostMapper postMapper;
 
     @Autowired
-    private UserPostMapper userPostMapper;
+    private SysUserPostMapper userPostMapper;
 
     /**
      * 查询岗位信息集合
@@ -32,7 +32,7 @@ public class PostServiceImpl implements IPostService
      * @return 岗位信息集合
      */
     @Override
-    public List<Post> selectPostList(Post post)
+    public List<SysPost> selectPostList(SysPost post)
     {
         return postMapper.selectPostList(post);
     }
@@ -43,7 +43,7 @@ public class PostServiceImpl implements IPostService
      * @return 岗位列表
      */
     @Override
-    public List<Post> selectPostAll()
+    public List<SysPost> selectPostAll()
     {
         return postMapper.selectPostAll();
     }
@@ -55,13 +55,13 @@ public class PostServiceImpl implements IPostService
      * @return 岗位列表
      */
     @Override
-    public List<Post> selectPostsByUserId(Long userId)
+    public List<SysPost> selectPostsByUserId(Long userId)
     {
-        List<Post> userPosts = postMapper.selectPostsByUserId(userId);
-        List<Post> posts = postMapper.selectPostAll();
-        for (Post post : posts)
+        List<SysPost> userPosts = postMapper.selectPostsByUserId(userId);
+        List<SysPost> posts = postMapper.selectPostAll();
+        for (SysPost post : posts)
         {
-            for (Post userRole : userPosts)
+            for (SysPost userRole : userPosts)
             {
                 if (post.getPostId().longValue() == userRole.getPostId().longValue())
                 {
@@ -80,7 +80,7 @@ public class PostServiceImpl implements IPostService
      * @return 角色对象信息
      */
     @Override
-    public Post selectPostById(Long postId)
+    public SysPost selectPostById(Long postId)
     {
         return postMapper.selectPostById(postId);
     }
@@ -97,7 +97,7 @@ public class PostServiceImpl implements IPostService
         Long[] postIds = Convert.toLongArray(ids);
         for (Long postId : postIds)
         {
-            Post post = selectPostById(postId);
+            SysPost post = selectPostById(postId);
             if (countUserPostById(postId) > 0)
             {
                 throw new Exception(String.format("%1$s已分配,不能删除", post.getPostName()));
@@ -113,9 +113,8 @@ public class PostServiceImpl implements IPostService
      * @return 结果
      */
     @Override
-    public int insertPost(Post post)
+    public int insertPost(SysPost post)
     {
-        post.setCreateBy(ShiroUtils.getLoginName());
         return postMapper.insertPost(post);
     }
 
@@ -126,9 +125,8 @@ public class PostServiceImpl implements IPostService
      * @return 结果
      */
     @Override
-    public int updatePost(Post post)
+    public int updatePost(SysPost post)
     {
-        post.setUpdateBy(ShiroUtils.getLoginName());
         return postMapper.updatePost(post);
     }
 
@@ -151,10 +149,10 @@ public class PostServiceImpl implements IPostService
      * @return 结果
      */
     @Override
-    public String checkPostNameUnique(Post post)
+    public String checkPostNameUnique(SysPost post)
     {
         Long postId = StringUtils.isNull(post.getPostId()) ? -1L : post.getPostId();
-        Post info = postMapper.checkPostNameUnique(post.getPostName());
+        SysPost info = postMapper.checkPostNameUnique(post.getPostName());
         if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue())
         {
             return UserConstants.POST_NAME_NOT_UNIQUE;
@@ -169,10 +167,10 @@ public class PostServiceImpl implements IPostService
      * @return 结果
      */
     @Override
-    public String checkPostCodeUnique(Post post)
+    public String checkPostCodeUnique(SysPost post)
     {
         Long postId = StringUtils.isNull(post.getPostId()) ? -1L : post.getPostId();
-        Post info = postMapper.checkPostCodeUnique(post.getPostCode());
+        SysPost info = postMapper.checkPostCodeUnique(post.getPostCode());
         if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue())
         {
             return UserConstants.POST_CODE_NOT_UNIQUE;
diff --git a/src/main/java/com/ruoyi/project/system/role/service/RoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
similarity index 71%
rename from src/main/java/com/ruoyi/project/system/role/service/RoleServiceImpl.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
index 2a2ed206..045f3648 100644
--- a/src/main/java/com/ruoyi/project/system/role/service/RoleServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
@@ -1,305 +1,300 @@
-package com.ruoyi.project.system.role.service;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.ruoyi.common.constant.UserConstants;
-import com.ruoyi.common.support.Convert;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.security.ShiroUtils;
-import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
-import com.ruoyi.project.system.role.domain.Role;
-import com.ruoyi.project.system.role.domain.RoleDept;
-import com.ruoyi.project.system.role.domain.RoleMenu;
-import com.ruoyi.project.system.role.mapper.RoleDeptMapper;
-import com.ruoyi.project.system.role.mapper.RoleMapper;
-import com.ruoyi.project.system.role.mapper.RoleMenuMapper;
-import com.ruoyi.project.system.user.mapper.UserRoleMapper;
-
-/**
- * 角色 业务层处理
- * 
- * @author ruoyi
- */
-@Service
-public class RoleServiceImpl implements IRoleService
-{
-    @Autowired
-    private RoleMapper roleMapper;
-
-    @Autowired
-    private RoleMenuMapper roleMenuMapper;
-
-    @Autowired
-    private UserRoleMapper userRoleMapper;
-
-    @Autowired
-    private RoleDeptMapper roleDeptMapper;
-
-    /**
-     * 根据条件分页查询角色数据
-     * 
-     * @param role 角色信息
-     * @return 角色数据集合信息
-     */
-    @Override
-    @DataScope(tableAlias = "u")
-    public List<Role> selectRoleList(Role role)
-    {
-        return roleMapper.selectRoleList(role);
-    }
-
-    /**
-     * 根据用户ID查询权限
-     * 
-     * @param userId 用户ID
-     * @return 权限列表
-     */
-    @Override
-    public Set<String> selectRoleKeys(Long userId)
-    {
-        List<Role> perms = roleMapper.selectRolesByUserId(userId);
-        Set<String> permsSet = new HashSet<>();
-        for (Role perm : perms)
-        {
-            if (StringUtils.isNotNull(perms))
-            {
-                permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(",")));
-            }
-        }
-        return permsSet;
-    }
-
-    /**
-     * 根据用户ID查询角色
-     * 
-     * @param userId 用户ID
-     * @return 角色列表
-     */
-    @Override
-    public List<Role> selectRolesByUserId(Long userId)
-    {
-        List<Role> userRoles = roleMapper.selectRolesByUserId(userId);
-        List<Role> roles = selectRoleAll();
-        for (Role role : roles)
-        {
-            for (Role userRole : userRoles)
-            {
-                if (role.getRoleId().longValue() == userRole.getRoleId().longValue())
-                {
-                    role.setFlag(true);
-                    break;
-                }
-            }
-        }
-        return roles;
-    }
-
-    /**
-     * 查询所有角色
-     * 
-     * @return 角色列表
-     */
-    @Override
-    public List<Role> selectRoleAll()
-    {
-        return selectRoleList(new Role());
-    }
-
-    /**
-     * 通过角色ID查询角色
-     * 
-     * @param roleId 角色ID
-     * @return 角色对象信息
-     */
-    @Override
-    public Role selectRoleById(Long roleId)
-    {
-        return roleMapper.selectRoleById(roleId);
-    }
-
-    /**
-     * 通过角色ID删除角色
-     * 
-     * @param roleId 角色ID
-     * @return 结果
-     */
-    @Override
-    public boolean deleteRoleById(Long roleId)
-    {
-        return roleMapper.deleteRoleById(roleId) > 0 ? true : false;
-    }
-
-    /**
-     * 批量删除角色信息
-     * 
-     * @param ids 需要删除的数据ID
-     * @throws Exception
-     */
-    @Override
-    public int deleteRoleByIds(String ids) throws Exception
-    {
-        Long[] roleIds = Convert.toLongArray(ids);
-        for (Long roleId : roleIds)
-        {
-            Role role = selectRoleById(roleId);
-            if (countUserRoleByRoleId(roleId) > 0)
-            {
-                throw new Exception(String.format("%1$s已分配,不能删除", role.getRoleName()));
-            }
-        }
-        return roleMapper.deleteRoleByIds(roleIds);
-    }
-
-    /**
-     * 新增保存角色信息
-     * 
-     * @param role 角色信息
-     * @return 结果
-     */
-    @Override
-    public int insertRole(Role role)
-    {
-        role.setCreateBy(ShiroUtils.getLoginName());
-        // 新增角色信息
-        roleMapper.insertRole(role);
-        ShiroUtils.clearCachedAuthorizationInfo();
-        return insertRoleMenu(role);
-    }
-
-    /**
-     * 修改保存角色信息
-     * 
-     * @param role 角色信息
-     * @return 结果
-     */
-    @Override
-    public int updateRole(Role role)
-    {
-        role.setUpdateBy(ShiroUtils.getLoginName());
-        // 修改角色信息
-        roleMapper.updateRole(role);
-        ShiroUtils.clearCachedAuthorizationInfo();
-        // 删除角色与菜单关联
-        roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId());
-        return insertRoleMenu(role);
-    }
-
-    /**
-     * 修改数据权限信息
-     * 
-     * @param role 角色信息
-     * @return 结果
-     */
-    @Override
-    public int updateRule(Role role)
-    {
-        role.setUpdateBy(ShiroUtils.getLoginName());
-        // 修改角色信息
-        roleMapper.updateRole(role);
-        // 删除角色与部门关联
-        roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId());
-        // 新增角色和部门信息(数据权限)
-        return insertRoleDept(role);
-    }
-
-    /**
-     * 新增角色菜单信息
-     * 
-     * @param role 角色对象
-     */
-    public int insertRoleMenu(Role role)
-    {
-        int rows = 1;
-        // 新增用户与角色管理
-        List<RoleMenu> list = new ArrayList<RoleMenu>();
-        for (Long menuId : role.getMenuIds())
-        {
-            RoleMenu rm = new RoleMenu();
-            rm.setRoleId(role.getRoleId());
-            rm.setMenuId(menuId);
-            list.add(rm);
-        }
-        if (list.size() > 0)
-        {
-            rows = roleMenuMapper.batchRoleMenu(list);
-        }
-        return rows;
-    }
-
-    /**
-     * 新增角色部门信息(数据权限)
-     *
-     * @param role 角色对象
-     */
-    public int insertRoleDept(Role role)
-    {
-        int rows = 1;
-        // 新增角色与部门(数据权限)管理
-        List<RoleDept> list = new ArrayList<RoleDept>();
-        for (Long deptId : role.getDeptIds())
-        {
-            RoleDept rd = new RoleDept();
-            rd.setRoleId(role.getRoleId());
-            rd.setDeptId(deptId);
-            list.add(rd);
-        }
-        if (list.size() > 0)
-        {
-            rows = roleDeptMapper.batchRoleDept(list);
-        }
-        return rows;
-    }
-
-    /**
-     * 校验角色名称是否唯一
-     * 
-     * @param role 角色信息
-     * @return 结果
-     */
-    @Override
-    public String checkRoleNameUnique(Role role)
-    {
-        Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId();
-        Role info = roleMapper.checkRoleNameUnique(role.getRoleName());
-        if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue())
-        {
-            return UserConstants.ROLE_NAME_NOT_UNIQUE;
-        }
-        return UserConstants.ROLE_NAME_UNIQUE;
-    }
-
-    /**
-     * 校验角色权限是否唯一
-     * 
-     * @param role 角色信息
-     * @return 结果
-     */
-    @Override
-    public String checkRoleKeyUnique(Role role)
-    {
-        Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId();
-        Role info = roleMapper.checkRoleKeyUnique(role.getRoleKey());
-        if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue())
-        {
-            return UserConstants.ROLE_KEY_NOT_UNIQUE;
-        }
-        return UserConstants.ROLE_KEY_UNIQUE;
-    }
-
-    /**
-     * 通过角色ID查询角色使用数量
-     * 
-     * @param roleId 角色ID
-     * @return 结果
-     */
-    @Override
-    public int countUserRoleByRoleId(Long roleId)
-    {
-        return userRoleMapper.countUserRoleByRoleId(roleId);
-    }
-}
+package com.ruoyi.system.service.impl;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.common.annotation.DataScope;
+import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.support.Convert;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.domain.SysRole;
+import com.ruoyi.system.domain.SysRoleDept;
+import com.ruoyi.system.domain.SysRoleMenu;
+import com.ruoyi.system.mapper.SysRoleDeptMapper;
+import com.ruoyi.system.mapper.SysRoleMapper;
+import com.ruoyi.system.mapper.SysRoleMenuMapper;
+import com.ruoyi.system.mapper.SysUserRoleMapper;
+import com.ruoyi.system.service.ISysRoleService;
+
+/**
+ * 角色 业务层处理
+ * 
+ * @author ruoyi
+ */
+@Service
+public class SysRoleServiceImpl implements ISysRoleService
+{
+    @Autowired
+    private SysRoleMapper roleMapper;
+
+    @Autowired
+    private SysRoleMenuMapper roleMenuMapper;
+
+    @Autowired
+    private SysUserRoleMapper userRoleMapper;
+
+    @Autowired
+    private SysRoleDeptMapper roleDeptMapper;
+
+    /**
+     * 根据条件分页查询角色数据
+     * 
+     * @param role 角色信息
+     * @return 角色数据集合信息
+     */
+    @Override
+    @DataScope(tableAlias = "u")
+    public List<SysRole> selectRoleList(SysRole role)
+    {
+        return roleMapper.selectRoleList(role);
+    }
+
+    /**
+     * 根据用户ID查询权限
+     * 
+     * @param userId 用户ID
+     * @return 权限列表
+     */
+    @Override
+    public Set<String> selectRoleKeys(Long userId)
+    {
+        List<SysRole> perms = roleMapper.selectRolesByUserId(userId);
+        Set<String> permsSet = new HashSet<>();
+        for (SysRole perm : perms)
+        {
+            if (StringUtils.isNotNull(perms))
+            {
+                permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(",")));
+            }
+        }
+        return permsSet;
+    }
+
+    /**
+     * 根据用户ID查询角色
+     * 
+     * @param userId 用户ID
+     * @return 角色列表
+     */
+    @Override
+    public List<SysRole> selectRolesByUserId(Long userId)
+    {
+        List<SysRole> userRoles = roleMapper.selectRolesByUserId(userId);
+        List<SysRole> roles = selectRoleAll();
+        for (SysRole role : roles)
+        {
+            for (SysRole userRole : userRoles)
+            {
+                if (role.getRoleId().longValue() == userRole.getRoleId().longValue())
+                {
+                    role.setFlag(true);
+                    break;
+                }
+            }
+        }
+        return roles;
+    }
+
+    /**
+     * 查询所有角色
+     * 
+     * @return 角色列表
+     */
+    @Override
+    public List<SysRole> selectRoleAll()
+    {
+        return selectRoleList(new SysRole());
+    }
+
+    /**
+     * 通过角色ID查询角色
+     * 
+     * @param roleId 角色ID
+     * @return 角色对象信息
+     */
+    @Override
+    public SysRole selectRoleById(Long roleId)
+    {
+        return roleMapper.selectRoleById(roleId);
+    }
+
+    /**
+     * 通过角色ID删除角色
+     * 
+     * @param roleId 角色ID
+     * @return 结果
+     */
+    @Override
+    public boolean deleteRoleById(Long roleId)
+    {
+        return roleMapper.deleteRoleById(roleId) > 0 ? true : false;
+    }
+
+    /**
+     * 批量删除角色信息
+     * 
+     * @param ids 需要删除的数据ID
+     * @throws Exception
+     */
+    @Override
+    public int deleteRoleByIds(String ids) throws Exception
+    {
+        Long[] roleIds = Convert.toLongArray(ids);
+        for (Long roleId : roleIds)
+        {
+            SysRole role = selectRoleById(roleId);
+            if (countUserRoleByRoleId(roleId) > 0)
+            {
+                throw new Exception(String.format("%1$s已分配,不能删除", role.getRoleName()));
+            }
+        }
+        return roleMapper.deleteRoleByIds(roleIds);
+    }
+
+    /**
+     * 新增保存角色信息
+     * 
+     * @param role 角色信息
+     * @return 结果
+     */
+    @Override
+    public int insertRole(SysRole role)
+    {
+        // 新增角色信息
+        roleMapper.insertRole(role);
+        return insertRoleMenu(role);
+    }
+
+    /**
+     * 修改保存角色信息
+     * 
+     * @param role 角色信息
+     * @return 结果
+     */
+    @Override
+    public int updateRole(SysRole role)
+    {
+        // 修改角色信息
+        roleMapper.updateRole(role);
+        // 删除角色与菜单关联
+        roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId());
+        return insertRoleMenu(role);
+    }
+
+    /**
+     * 修改数据权限信息
+     * 
+     * @param role 角色信息
+     * @return 结果
+     */
+    @Override
+    public int updateRule(SysRole role)
+    {
+        // 修改角色信息
+        roleMapper.updateRole(role);
+        // 删除角色与部门关联
+        roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId());
+        // 新增角色和部门信息(数据权限)
+        return insertRoleDept(role);
+    }
+
+    /**
+     * 新增角色菜单信息
+     * 
+     * @param role 角色对象
+     */
+    public int insertRoleMenu(SysRole role)
+    {
+        int rows = 1;
+        // 新增用户与角色管理
+        List<SysRoleMenu> list = new ArrayList<SysRoleMenu>();
+        for (Long menuId : role.getMenuIds())
+        {
+            SysRoleMenu rm = new SysRoleMenu();
+            rm.setRoleId(role.getRoleId());
+            rm.setMenuId(menuId);
+            list.add(rm);
+        }
+        if (list.size() > 0)
+        {
+            rows = roleMenuMapper.batchRoleMenu(list);
+        }
+        return rows;
+    }
+
+    /**
+     * 新增角色部门信息(数据权限)
+     *
+     * @param role 角色对象
+     */
+    public int insertRoleDept(SysRole role)
+    {
+        int rows = 1;
+        // 新增角色与部门(数据权限)管理
+        List<SysRoleDept> list = new ArrayList<SysRoleDept>();
+        for (Long deptId : role.getDeptIds())
+        {
+            SysRoleDept rd = new SysRoleDept();
+            rd.setRoleId(role.getRoleId());
+            rd.setDeptId(deptId);
+            list.add(rd);
+        }
+        if (list.size() > 0)
+        {
+            rows = roleDeptMapper.batchRoleDept(list);
+        }
+        return rows;
+    }
+
+    /**
+     * 校验角色名称是否唯一
+     * 
+     * @param role 角色信息
+     * @return 结果
+     */
+    @Override
+    public String checkRoleNameUnique(SysRole role)
+    {
+        Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId();
+        SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName());
+        if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue())
+        {
+            return UserConstants.ROLE_NAME_NOT_UNIQUE;
+        }
+        return UserConstants.ROLE_NAME_UNIQUE;
+    }
+
+    /**
+     * 校验角色权限是否唯一
+     * 
+     * @param role 角色信息
+     * @return 结果
+     */
+    @Override
+    public String checkRoleKeyUnique(SysRole role)
+    {
+        Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId();
+        SysRole info = roleMapper.checkRoleKeyUnique(role.getRoleKey());
+        if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue())
+        {
+            return UserConstants.ROLE_KEY_NOT_UNIQUE;
+        }
+        return UserConstants.ROLE_KEY_UNIQUE;
+    }
+
+    /**
+     * 通过角色ID查询角色使用数量
+     * 
+     * @param roleId 角色ID
+     * @return 结果
+     */
+    @Override
+    public int countUserRoleByRoleId(Long roleId)
+    {
+        return userRoleMapper.countUserRoleByRoleId(roleId);
+    }
+}
diff --git a/src/main/java/com/ruoyi/project/monitor/online/service/UserOnlineServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java
similarity index 60%
rename from src/main/java/com/ruoyi/project/monitor/online/service/UserOnlineServiceImpl.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java
index 0b3d9185..12be7b45 100644
--- a/src/main/java/com/ruoyi/project/monitor/online/service/UserOnlineServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java
@@ -1,29 +1,24 @@
-package com.ruoyi.project.monitor.online.service;
+package com.ruoyi.system.service.impl;
 
 import java.util.Date;
 import java.util.List;
-import org.apache.shiro.session.Session;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
+import org.springframework.stereotype.Component;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.framework.shiro.session.OnlineSessionDAO;
-import com.ruoyi.project.monitor.online.domain.UserOnline;
-import com.ruoyi.project.monitor.online.mapper.UserOnlineMapper;
+import com.ruoyi.system.domain.SysUserOnline;
+import com.ruoyi.system.mapper.SysUserOnlineMapper;
 
 /**
  * 在线用户 服务层处理
  * 
  * @author ruoyi
  */
-@Service
-public class UserOnlineServiceImpl implements IUserOnlineService
+@Component
+public class SysUserOnlineServiceImpl
 {
     @Autowired
-    private UserOnlineMapper userOnlineDao;
-
-    @Autowired
-    private OnlineSessionDAO onlineSessionDAO;
+    private SysUserOnlineMapper userOnlineDao;
 
     /**
      * 通过会话序号查询信息
@@ -31,8 +26,7 @@ public class UserOnlineServiceImpl implements IUserOnlineService
      * @param sessionId 会话ID
      * @return 在线用户信息
      */
-    @Override
-    public UserOnline selectOnlineById(String sessionId)
+    public SysUserOnline selectOnlineById(String sessionId)
     {
         return userOnlineDao.selectOnlineById(sessionId);
     }
@@ -43,10 +37,9 @@ public class UserOnlineServiceImpl implements IUserOnlineService
      * @param sessionId 会话ID
      * @return 在线用户信息
      */
-    @Override
     public void deleteOnlineById(String sessionId)
     {
-        UserOnline userOnline = selectOnlineById(sessionId);
+        SysUserOnline userOnline = selectOnlineById(sessionId);
         if (StringUtils.isNotNull(userOnline))
         {
             userOnlineDao.deleteOnlineById(sessionId);
@@ -59,12 +52,11 @@ public class UserOnlineServiceImpl implements IUserOnlineService
      * @param sessions 会话ID集合
      * @return 在线用户信息
      */
-    @Override
     public void batchDeleteOnline(List<String> sessions)
     {
         for (String sessionId : sessions)
         {
-            UserOnline userOnline = selectOnlineById(sessionId);
+            SysUserOnline userOnline = selectOnlineById(sessionId);
             if (StringUtils.isNotNull(userOnline))
             {
                 userOnlineDao.deleteOnlineById(sessionId);
@@ -77,8 +69,7 @@ public class UserOnlineServiceImpl implements IUserOnlineService
      * 
      * @param online 会话信息
      */
-    @Override
-    public void saveOnline(UserOnline online)
+    public void saveOnline(SysUserOnline online)
     {
         userOnlineDao.saveOnline(online);
     }
@@ -88,8 +79,7 @@ public class UserOnlineServiceImpl implements IUserOnlineService
      * 
      * @param pageUtilEntity 分页参数
      */
-    @Override
-    public List<UserOnline> selectUserOnlineList(UserOnline userOnline)
+    public List<SysUserOnline> selectUserOnlineList(SysUserOnline userOnline)
     {
         return userOnlineDao.selectUserOnlineList(userOnline);
     }
@@ -99,15 +89,8 @@ public class UserOnlineServiceImpl implements IUserOnlineService
      * 
      * @param sessionId 会话ID
      */
-    @Override
     public void forceLogout(String sessionId)
     {
-        Session session = onlineSessionDAO.readSession(sessionId);
-        if (session == null)
-        {
-            return;
-        }
-        session.setTimeout(1000);
         userOnlineDao.deleteOnlineById(sessionId);
     }
 
@@ -116,8 +99,7 @@ public class UserOnlineServiceImpl implements IUserOnlineService
      * 
      * @param online 会话信息
      */
-    @Override
-    public List<UserOnline> selectOnlineByExpired(Date expiredDate)
+    public List<SysUserOnline> selectOnlineByExpired(Date expiredDate)
     {
         String lastAccessTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, expiredDate);
         return userOnlineDao.selectOnlineByExpired(lastAccessTime);
diff --git a/src/main/java/com/ruoyi/project/system/user/service/UserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
similarity index 69%
rename from src/main/java/com/ruoyi/project/system/user/service/UserServiceImpl.java
rename to ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index b5e114b9..a5b969e6 100644
--- a/src/main/java/com/ruoyi/project/system/user/service/UserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -1,25 +1,24 @@
-package com.ruoyi.project.system.user.service;
+package com.ruoyi.system.service.impl;
 
 import java.util.ArrayList;
 import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import com.ruoyi.common.annotation.DataScope;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.support.Convert;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.security.ShiroUtils;
-import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
-import com.ruoyi.framework.shiro.service.PasswordService;
-import com.ruoyi.project.system.post.domain.Post;
-import com.ruoyi.project.system.post.mapper.PostMapper;
-import com.ruoyi.project.system.role.domain.Role;
-import com.ruoyi.project.system.role.mapper.RoleMapper;
-import com.ruoyi.project.system.user.domain.User;
-import com.ruoyi.project.system.user.domain.UserPost;
-import com.ruoyi.project.system.user.domain.UserRole;
-import com.ruoyi.project.system.user.mapper.UserMapper;
-import com.ruoyi.project.system.user.mapper.UserPostMapper;
-import com.ruoyi.project.system.user.mapper.UserRoleMapper;
+import com.ruoyi.system.domain.SysPost;
+import com.ruoyi.system.domain.SysRole;
+import com.ruoyi.system.domain.SysUser;
+import com.ruoyi.system.domain.SysUserPost;
+import com.ruoyi.system.domain.SysUserRole;
+import com.ruoyi.system.mapper.SysPostMapper;
+import com.ruoyi.system.mapper.SysRoleMapper;
+import com.ruoyi.system.mapper.SysUserMapper;
+import com.ruoyi.system.mapper.SysUserPostMapper;
+import com.ruoyi.system.mapper.SysUserRoleMapper;
+import com.ruoyi.system.service.ISysUserService;
 
 /**
  * 用户 业务层处理
@@ -27,25 +26,22 @@ import com.ruoyi.project.system.user.mapper.UserRoleMapper;
  * @author ruoyi
  */
 @Service
-public class UserServiceImpl implements IUserService
+public class SysUserServiceImpl implements ISysUserService
 {
     @Autowired
-    private UserMapper userMapper;
+    private SysUserMapper userMapper;
 
     @Autowired
-    private RoleMapper roleMapper;
+    private SysRoleMapper roleMapper;
 
     @Autowired
-    private PostMapper postMapper;
+    private SysPostMapper postMapper;
 
     @Autowired
-    private UserPostMapper userPostMapper;
+    private SysUserPostMapper userPostMapper;
 
     @Autowired
-    private UserRoleMapper userRoleMapper;
-
-    @Autowired
-    private PasswordService passwordService;
+    private SysUserRoleMapper userRoleMapper;
 
     /**
      * 根据条件分页查询用户对象
@@ -56,9 +52,8 @@ public class UserServiceImpl implements IUserService
      */
     @Override
     @DataScope(tableAlias = "u")
-    public List<User> selectUserList(User user)
+    public List<SysUser> selectUserList(SysUser user)
     {
-        // 生成数据权限过滤条件
         return userMapper.selectUserList(user);
     }
 
@@ -69,7 +64,7 @@ public class UserServiceImpl implements IUserService
      * @return 用户对象信息
      */
     @Override
-    public User selectUserByLoginName(String userName)
+    public SysUser selectUserByLoginName(String userName)
     {
         return userMapper.selectUserByLoginName(userName);
     }
@@ -81,7 +76,7 @@ public class UserServiceImpl implements IUserService
      * @return 用户对象信息
      */
     @Override
-    public User selectUserByPhoneNumber(String phoneNumber)
+    public SysUser selectUserByPhoneNumber(String phoneNumber)
     {
         return userMapper.selectUserByPhoneNumber(phoneNumber);
     }
@@ -93,7 +88,7 @@ public class UserServiceImpl implements IUserService
      * @return 用户对象信息
      */
     @Override
-    public User selectUserByEmail(String email)
+    public SysUser selectUserByEmail(String email)
     {
         return userMapper.selectUserByEmail(email);
     }
@@ -105,7 +100,7 @@ public class UserServiceImpl implements IUserService
      * @return 用户对象信息
      */
     @Override
-    public User selectUserById(Long userId)
+    public SysUser selectUserById(Long userId)
     {
         return userMapper.selectUserById(userId);
     }
@@ -138,7 +133,7 @@ public class UserServiceImpl implements IUserService
         Long[] userIds = Convert.toLongArray(ids);
         for (Long userId : userIds)
         {
-            if (User.isAdmin(userId))
+            if (SysUser.isAdmin(userId))
             {
                 throw new Exception("不允许删除超级管理员用户");
             }
@@ -153,11 +148,8 @@ public class UserServiceImpl implements IUserService
      * @return 结果
      */
     @Override
-    public int insertUser(User user)
+    public int insertUser(SysUser user)
     {
-        user.randomSalt();
-        user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
-        user.setCreateBy(ShiroUtils.getLoginName());
         // 新增用户信息
         int rows = userMapper.insertUser(user);
         // 新增用户岗位关联
@@ -174,10 +166,9 @@ public class UserServiceImpl implements IUserService
      * @return 结果
      */
     @Override
-    public int updateUser(User user)
+    public int updateUser(SysUser user)
     {
         Long userId = user.getUserId();
-        user.setUpdateBy(ShiroUtils.getLoginName());
         // 删除用户与角色关联
         userRoleMapper.deleteUserRoleByUserId(userId);
         // 新增用户与角色管理
@@ -196,7 +187,7 @@ public class UserServiceImpl implements IUserService
      * @return 结果
      */
     @Override
-    public int updateUserInfo(User user)
+    public int updateUserInfo(SysUser user)
     {
         return userMapper.updateUser(user);
     }
@@ -208,10 +199,8 @@ public class UserServiceImpl implements IUserService
      * @return 结果
      */
     @Override
-    public int resetUserPwd(User user)
+    public int resetUserPwd(SysUser user)
     {
-        user.randomSalt();
-        user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
         return updateUserInfo(user);
     }
 
@@ -220,13 +209,13 @@ public class UserServiceImpl implements IUserService
      * 
      * @param user 用户对象
      */
-    public void insertUserRole(User user)
+    public void insertUserRole(SysUser user)
     {
         // 新增用户与角色管理
-        List<UserRole> list = new ArrayList<UserRole>();
+        List<SysUserRole> list = new ArrayList<SysUserRole>();
         for (Long roleId : user.getRoleIds())
         {
-            UserRole ur = new UserRole();
+            SysUserRole ur = new SysUserRole();
             ur.setUserId(user.getUserId());
             ur.setRoleId(roleId);
             list.add(ur);
@@ -242,13 +231,13 @@ public class UserServiceImpl implements IUserService
      * 
      * @param user 用户对象
      */
-    public void insertUserPost(User user)
+    public void insertUserPost(SysUser user)
     {
         // 新增用户与岗位管理
-        List<UserPost> list = new ArrayList<UserPost>();
+        List<SysUserPost> list = new ArrayList<SysUserPost>();
         for (Long postId : user.getPostIds())
         {
-            UserPost up = new UserPost();
+            SysUserPost up = new SysUserPost();
             up.setUserId(user.getUserId());
             up.setPostId(postId);
             list.add(up);
@@ -283,10 +272,10 @@ public class UserServiceImpl implements IUserService
      * @return
      */
     @Override
-    public String checkPhoneUnique(User user)
+    public String checkPhoneUnique(SysUser user)
     {
         Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
-        User info = userMapper.checkPhoneUnique(user.getPhonenumber());
+        SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber());
         if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
         {
             return UserConstants.USER_PHONE_NOT_UNIQUE;
@@ -301,10 +290,10 @@ public class UserServiceImpl implements IUserService
      * @return
      */
     @Override
-    public String checkEmailUnique(User user)
+    public String checkEmailUnique(SysUser user)
     {
         Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
-        User info = userMapper.checkEmailUnique(user.getEmail());
+        SysUser info = userMapper.checkEmailUnique(user.getEmail());
         if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue())
         {
             return UserConstants.USER_EMAIL_NOT_UNIQUE;
@@ -321,9 +310,9 @@ public class UserServiceImpl implements IUserService
     @Override
     public String selectUserRoleGroup(Long userId)
     {
-        List<Role> list = roleMapper.selectRolesByUserId(userId);
+        List<SysRole> list = roleMapper.selectRolesByUserId(userId);
         StringBuffer idsStr = new StringBuffer();
-        for (Role role : list)
+        for (SysRole role : list)
         {
             idsStr.append(role.getRoleName()).append(",");
         }
@@ -343,9 +332,9 @@ public class UserServiceImpl implements IUserService
     @Override
     public String selectUserPostGroup(Long userId)
     {
-        List<Post> list = postMapper.selectPostsByUserId(userId);
+        List<SysPost> list = postMapper.selectPostsByUserId(userId);
         StringBuffer idsStr = new StringBuffer();
-        for (Post post : list)
+        for (SysPost post : list)
         {
             idsStr.append(post.getPostName()).append(",");
         }
diff --git a/src/main/resources/mybatis/mybatis-config.xml b/ruoyi-system/src/main/resources/mapper/mybatis-config.xml
similarity index 100%
rename from src/main/resources/mybatis/mybatis-config.xml
rename to ruoyi-system/src/main/resources/mapper/mybatis-config.xml
diff --git a/src/main/resources/mybatis/system/ConfigMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
similarity index 88%
rename from src/main/resources/mybatis/system/ConfigMapper.xml
rename to ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
index c7c59dfc..c0228ca7 100644
--- a/src/main/resources/mybatis/system/ConfigMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.system.config.mapper.ConfigMapper">
+<mapper namespace="com.ruoyi.system.mapper.SysConfigMapper">
     
-    <resultMap type="Config" id="ConfigResult">
+    <resultMap type="SysConfig" id="SysConfigResult">
     	<id     property="configId"      column="config_id"      />
         <result property="configName"    column="config_name"    />
         <result property="configKey"     column="config_key"     />
@@ -33,12 +33,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		</where>
 	</sql>
     
-    <select id="selectConfig" parameterType="Config" resultMap="ConfigResult">
+    <select id="selectConfig" parameterType="SysConfig" resultMap="SysConfigResult">
         <include refid="selectConfigVo"/>
         <include refid="sqlwhereSearch"/>
     </select>
     
-    <select id="selectConfigList" parameterType="Config" resultMap="ConfigResult">
+    <select id="selectConfigList" parameterType="SysConfig" resultMap="SysConfigResult">
         <include refid="selectConfigVo"/>
         <where>
 			<if test="configName != null and configName != ''">
@@ -59,12 +59,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		</where>
     </select>
     
-    <select id="checkConfigKeyUnique" parameterType="String" resultMap="ConfigResult">
+    <select id="checkConfigKeyUnique" parameterType="String" resultMap="SysConfigResult">
         <include refid="selectConfigVo"/>
         where config_key = #{configKey}
     </select>
     
-    <insert id="insertConfig" parameterType="Config">
+    <insert id="insertConfig" parameterType="SysConfig">
         insert into sys_config (
 			<if test="configName != null and configName != '' ">config_name,</if>
 			<if test="configKey != null and configKey != '' ">config_key,</if>
@@ -84,7 +84,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		)
     </insert>
 	 
-    <update id="updateConfig" parameterType="Config">
+    <update id="updateConfig" parameterType="SysConfig">
         update sys_config 
         <set>
             <if test="configName != null and configName != ''">config_name = #{configName},</if>
diff --git a/src/main/resources/mybatis/system/DeptMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
similarity index 89%
rename from src/main/resources/mybatis/system/DeptMapper.xml
rename to ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
index e9913f86..fbb8e428 100644
--- a/src/main/resources/mybatis/system/DeptMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.system.dept.mapper.DeptMapper">
+<mapper namespace="com.ruoyi.system.mapper.SysDeptMapper">
 
-	<resultMap type="Dept" id="DeptResult">
+	<resultMap type="SysDept" id="SysDeptResult">
 		<id     property="deptId"     column="dept_id"     />
 		<result property="parentId"   column="parent_id"   />
 		<result property="ancestors"  column="ancestors"   />
@@ -35,7 +35,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		order by d.parent_id, d.order_num
 	</select>
 	
-	<select id="selectDeptList" parameterType="Dept" resultMap="DeptResult">
+	<select id="selectDeptList" parameterType="SysDept" resultMap="SysDeptResult">
         <include refid="selectDeptVo"/>
         where d.del_flag = '0'
         <if test="parentId != null and parentId != 0">
@@ -55,26 +55,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		select count(1) from sys_user where dept_id = #{deptId} and del_flag = '0'
 	</select>
 	
-	<select id="selectDeptCount" parameterType="Dept" resultType="int">
+	<select id="selectDeptCount" parameterType="SysDept" resultType="int">
 		select count(1) from sys_dept
 		where del_flag = '0'
 		<if test="deptId != null and deptId != 0"> and dept_id = #{deptId} </if>
 		<if test="parentId != null and parentId != 0"> and parent_id = #{parentId} </if>
 	</select>
 	
-	<select id="checkDeptNameUnique" resultMap="DeptResult">
+	<select id="checkDeptNameUnique" resultMap="SysDeptResult">
 	    <include refid="selectDeptVo"/>
 		where dept_name=#{deptName} and parent_id = #{parentId}
 	</select>
 
-	<select id="selectDeptById" parameterType="Long" resultMap="DeptResult">
+	<select id="selectDeptById" parameterType="Long" resultMap="SysDeptResult">
 		select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status,
 			(select dept_name from sys_dept where dept_id = d.parent_id) parent_name
 		from sys_dept d
 		where d.dept_id = #{deptId}
 	</select>
 	
-	<insert id="insertDept" parameterType="Dept">
+	<insert id="insertDept" parameterType="SysDept">
  		insert into sys_dept(
  			<if test="deptId != null and deptId != 0">dept_id,</if>
  			<if test="parentId != null and parentId != 0">parent_id,</if>
@@ -102,7 +102,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  		)
 	</insert>
 	
-	<update id="updateDept" parameterType="Dept">
+	<update id="updateDept" parameterType="SysDept">
  		update sys_dept
  		<set>
  			<if test="parentId != null and parentId != 0">parent_id = #{parentId},</if>
diff --git a/src/main/resources/mybatis/system/DictDataMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml
similarity index 89%
rename from src/main/resources/mybatis/system/DictDataMapper.xml
rename to ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml
index b24c82b7..083efed8 100644
--- a/src/main/resources/mybatis/system/DictDataMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.system.dict.mapper.DictDataMapper">
+<mapper namespace="com.ruoyi.system.mapper.SysDictDataMapper">
 	
-	<resultMap type="DictData" id="DictDataResult">
+	<resultMap type="SysDictData" id="SysDictDataResult">
 		<id     property="dictCode"   column="dict_code"   />
 		<result property="dictSort"   column="dict_sort"   />
 		<result property="dictLabel"  column="dict_label"  />
@@ -25,7 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		from sys_dict_data
     </sql>
 
-	<select id="selectDictDataList" parameterType="DictData" resultMap="DictDataResult">
+	<select id="selectDictDataList" parameterType="SysDictData" resultMap="SysDictDataResult">
 	    <include refid="selectDictDataVo"/>
 		<where>
 		    <if test="dictType != null and dictType != ''">
@@ -40,7 +40,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		</where>
 	</select>
 	
-	<select id="selectDictDataByType" parameterType="DictData" resultMap="DictDataResult">
+	<select id="selectDictDataByType" parameterType="SysDictData" resultMap="SysDictDataResult">
 		<include refid="selectDictDataVo"/>
 		where dict_type = #{dictType} order by dict_sort asc
 	</select>
@@ -50,7 +50,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		where dict_type = #{dictType} and dict_value = #{dictValue}
 	</select>
 	
-	<select id="selectDictDataById" parameterType="Long" resultMap="DictDataResult">
+	<select id="selectDictDataById" parameterType="Long" resultMap="SysDictDataResult">
 		<include refid="selectDictDataVo"/>
 		where dict_code = #{dictCode}
 	</select>
@@ -70,7 +70,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach> 
  	</delete>
  	
-	<update id="updateDictData" parameterType="DictData">
+	<update id="updateDictData" parameterType="SysDictData">
  		update sys_dict_data
  		<set>
  			<if test="dictSort != null and dictSort != ''">dict_sort = #{dictSort},</if>
@@ -92,7 +92,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  		update sys_dict_data set dict_type = #{newDictType} where dict_type = #{oldDictType}
 	</update>
  	
- 	<insert id="insertDictData" parameterType="DictData">
+ 	<insert id="insertDictData" parameterType="SysDictData">
  		insert into sys_dict_data(
  			<if test="dictSort != null and dictSort != ''">dict_sort,</if>
  			<if test="dictLabel != null and dictLabel != ''">dict_label,</if>
diff --git a/src/main/resources/mybatis/system/DictTypeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml
similarity index 86%
rename from src/main/resources/mybatis/system/DictTypeMapper.xml
rename to ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml
index d075f63e..4e7bbbd5 100644
--- a/src/main/resources/mybatis/system/DictTypeMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.system.dict.mapper.DictTypeMapper">
+<mapper namespace="com.ruoyi.system.mapper.SysDictTypeMapper">
 
-	<resultMap type="DictType" id="DictTypeResult">
+	<resultMap type="SysDictType" id="SysDictTypeResult">
 		<id     property="dictId"     column="dict_id"     />
 		<result property="dictName"   column="dict_name"   />
 		<result property="dictType"   column="dict_type"   />
@@ -20,7 +20,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		from sys_dict_type
     </sql>
 
-	<select id="selectDictTypeList" parameterType="DictType" resultMap="DictTypeResult">
+	<select id="selectDictTypeList" parameterType="SysDictType" resultMap="SysDictTypeResult">
 	    <include refid="selectDictTypeVo"/>
 		<where>
 		    <if test="dictName != null and dictName != ''">
@@ -41,16 +41,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	    </where>
 	</select>
 	
-	<select id="selectDictTypeAll" resultMap="DictTypeResult">
+	<select id="selectDictTypeAll" resultMap="SysDictTypeResult">
 		<include refid="selectDictTypeVo"/>
 	</select>
 	
-	<select id="selectDictTypeById" parameterType="Long" resultMap="DictTypeResult">
+	<select id="selectDictTypeById" parameterType="Long" resultMap="SysDictTypeResult">
 		<include refid="selectDictTypeVo"/>
 		where dict_id = #{dictId}
 	</select>
 	
-	<select id="checkDictTypeUnique" parameterType="String" resultMap="DictTypeResult">
+	<select id="checkDictTypeUnique" parameterType="String" resultMap="SysDictTypeResult">
 		<include refid="selectDictTypeVo"/>
 		where dict_type = #{dictType}
 	</select>
@@ -66,7 +66,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach> 
  	</delete>
 
- 	<update id="updateDictType" parameterType="DictType">
+ 	<update id="updateDictType" parameterType="SysDictType">
  		update sys_dict_type
  		<set>
  			<if test="dictName != null and dictName != ''">dict_name = #{dictName},</if>
@@ -79,7 +79,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  		where dict_id = #{dictId}
 	</update>
  	
- 	<insert id="insertDictType" parameterType="DictType">
+ 	<insert id="insertDictType" parameterType="SysDictType">
  		insert into sys_dict_type(
  			<if test="dictName != null and dictName != ''">dict_name,</if>
  			<if test="dictType != null and dictType != ''">dict_type,</if>
diff --git a/src/main/resources/mybatis/monitor/LogininforMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml
similarity index 84%
rename from src/main/resources/mybatis/monitor/LogininforMapper.xml
rename to ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml
index de7634fa..a2ac5b4e 100644
--- a/src/main/resources/mybatis/monitor/LogininforMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.monitor.logininfor.mapper.LogininforMapper">
+<mapper namespace="com.ruoyi.system.mapper.SysLogininforMapper">
 
-	<resultMap type="Logininfor" id="LogininforResult">
+	<resultMap type="SysLogininfor" id="SysLogininforResult">
 		<id     property="infoId"        column="info_id"           />
 		<result property="loginName"     column="login_name"        />
 		<result property="status"        column="status"            />
@@ -16,12 +16,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="loginTime"     column="login_time"        />
 	</resultMap>
 
-	<insert id="insertLogininfor" parameterType="Logininfor">
+	<insert id="insertLogininfor" parameterType="SysLogininfor">
 		insert into sys_logininfor (login_name, status, ipaddr, login_location, browser, os, msg, login_time)
 		values (#{loginName}, #{status}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{msg}, sysdate())
 	</insert>
 	
-	<select id="selectLogininforList" parameterType="Logininfor" resultMap="LogininforResult">
+	<select id="selectLogininforList" parameterType="SysLogininfor" resultMap="SysLogininforResult">
 		select info_id,login_name,ipaddr,login_location,browser,os,status,msg,login_time from sys_logininfor
 		<where>
 			<if test="ipaddr != null and ipaddr != ''">
@@ -48,9 +48,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			#{infoId}
         </foreach> 
  	</delete>
- 	
- 	<update id="cleanLogininfor">
+    
+    <update id="cleanLogininfor">
         truncate table sys_logininfor
     </update>
-
+    
 </mapper> 
\ No newline at end of file
diff --git a/src/main/resources/mybatis/system/MenuMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
similarity index 88%
rename from src/main/resources/mybatis/system/MenuMapper.xml
rename to ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
index b07e8518..c7bfca1f 100644
--- a/src/main/resources/mybatis/system/MenuMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.system.menu.mapper.MenuMapper">
+<mapper namespace="com.ruoyi.system.mapper.SysMenuMapper">
 
-	<resultMap type="Menu" id="MenuResult">
+	<resultMap type="SysMenu" id="SysMenuResult">
 		<id     property="menuId"         column="menu_id"        />
 		<result property="menuName"       column="menu_name"      />
 		<result property="parentName"     column="parent_name"    />
@@ -27,7 +27,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		from sys_menu
     </sql>
     
-    <select id="selectMenusByUserId" parameterType="Long" resultMap="MenuResult">
+    <select id="selectMenusByUserId" parameterType="Long" resultMap="SysMenuResult">
 		select distinct m.menu_id, m.parent_id, m.menu_name, m.url, m.perms , m.menu_type, m.icon, m.order_num, m.create_time
 		from sys_menu m
 			 left join sys_role_menu rm on m.menu_id = rm.menu_id
@@ -37,14 +37,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		order by m.order_num
 	</select>
 
-	<select id="selectMenuNormalAll" resultMap="MenuResult">
+	<select id="selectMenuNormalAll" resultMap="SysMenuResult">
 		select distinct m.menu_id, m.parent_id, m.menu_name, m.url, m.perms , m.menu_type, m.icon, m.order_num, m.create_time
 		from sys_menu m
 		where m.menu_type in ('M', 'C') and m.visible = 0
 		order by m.order_num
 	</select>
 	
-	<select id="selectMenuAll" resultMap="MenuResult">
+	<select id="selectMenuAll" resultMap="SysMenuResult">
 		<include refid="selectMenuVo"/>
 	</select>
 	
@@ -64,7 +64,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		order by m.parent_id, m.order_num
 	</select>
 	
-	<select id="selectMenuList" parameterType="Menu" resultMap="MenuResult">
+	<select id="selectMenuList" parameterType="SysMenu" resultMap="SysMenuResult">
         <include refid="selectMenuVo"/>
         <where>
 			<if test="menuName != null and menuName != ''">
@@ -80,7 +80,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	    delete from sys_menu where menu_id = #{menuId} or parent_id = #{menuId}
 	</delete>
 	
-	<select id="selectMenuById" parameterType="Long" resultMap="MenuResult">
+	<select id="selectMenuById" parameterType="Long" resultMap="SysMenuResult">
 		SELECT t.menu_id, t.parent_id, t.menu_name, t.order_num, t.url, t.menu_type, t.visible, t.perms, t.icon, t.remark,
 			(SELECT menu_name FROM sys_menu WHERE menu_id = t.parent_id) parent_name
 		FROM sys_menu t
@@ -91,12 +91,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	    select count(1) from sys_menu where parent_id=#{menuId}  
 	</select>
 	
-	<select id="checkMenuNameUnique" parameterType="Menu" resultMap="MenuResult">
+	<select id="checkMenuNameUnique" parameterType="SysMenu" resultMap="SysMenuResult">
 		<include refid="selectMenuVo"/>
 		where menu_name=#{menuName} and parent_id = #{parentId}
 	</select>
 	
-	<update id="updateMenu" parameterType="Menu">
+	<update id="updateMenu" parameterType="SysMenu">
  		update sys_menu
  		<set>
  			<if test="menuName != null and menuName != ''">menu_name = #{menuName},</if>
@@ -114,7 +114,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  		where menu_id = #{menuId}
 	</update>
  	
- 	<insert id="insertMenu" parameterType="Menu">
+ 	<insert id="insertMenu" parameterType="SysMenu">
  		insert into sys_menu(
  			<if test="menuId != null and menuId != 0">menu_id,</if>
  			<if test="parentId != null and parentId != 0">parent_id,</if>
diff --git a/src/main/resources/mybatis/system/NoticeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml
similarity index 88%
rename from src/main/resources/mybatis/system/NoticeMapper.xml
rename to ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml
index 03a26c42..889ab38b 100644
--- a/src/main/resources/mybatis/system/NoticeMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.system.notice.mapper.NoticeMapper">
+<mapper namespace="com.ruoyi.system.mapper.SysNoticeMapper">
     
-    <resultMap type="Notice" id="NoticeResult">
+    <resultMap type="SysNotice" id="SysNoticeResult">
         <result property="noticeId"       column="notice_id"       />
         <result property="noticeTitle"    column="notice_title"    />
         <result property="noticeType"     column="notice_type"     />
@@ -22,12 +22,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		from sys_notice
     </sql>
     
-    <select id="selectNoticeById" parameterType="Long" resultMap="NoticeResult">
+    <select id="selectNoticeById" parameterType="Long" resultMap="SysNoticeResult">
         <include refid="selectNoticeVo"/>
         where notice_id = #{noticeId}
     </select>
     
-    <select id="selectNoticeList" parameterType="Notice" resultMap="NoticeResult">
+    <select id="selectNoticeList" parameterType="SysNotice" resultMap="SysNoticeResult">
         <include refid="selectNoticeVo"/>
         <where>
 			<if test="noticeTitle != null and noticeTitle != ''">
@@ -42,7 +42,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		</where>
     </select>
     
-    <insert id="insertNotice" parameterType="Notice">
+    <insert id="insertNotice" parameterType="SysNotice">
         insert into sys_notice (
 			<if test="noticeTitle != null and noticeTitle != '' ">notice_title, </if>
 			<if test="noticeType != null and noticeType != '' ">notice_type, </if>
@@ -62,7 +62,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		)
     </insert>
 	 
-    <update id="updateNotice" parameterType="Notice">
+    <update id="updateNotice" parameterType="SysNotice">
         update sys_notice 
         <set>
             <if test="noticeTitle != null and noticeTitle != ''">notice_title = #{noticeTitle}, </if>
diff --git a/src/main/resources/mybatis/monitor/OperLogMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml
similarity index 88%
rename from src/main/resources/mybatis/monitor/OperLogMapper.xml
rename to ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml
index 426a6543..d972ea5e 100644
--- a/src/main/resources/mybatis/monitor/OperLogMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.monitor.operlog.mapper.OperLogMapper">
+<mapper namespace="com.ruoyi.system.mapper.SysOperLogMapper">
 
-	<resultMap type="OperLog" id="OperLogResult">
+	<resultMap type="SysOperLog" id="SysOperLogResult">
 		<id     property="operId"         column="oper_id"       />
 		<result property="title"          column="title"         />
 		<result property="businessType"   column="business_type" />
@@ -26,12 +26,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         from sys_oper_log
     </sql>
     
-	<insert id="insertOperlog" parameterType="OperLog">
+	<insert id="insertOperlog" parameterType="SysOperLog">
 		insert into sys_oper_log(title, business_type, method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, status, error_msg, oper_time)
         values (#{title}, #{businessType}, #{method}, #{operatorType}, #{operName}, #{deptName}, #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{status}, #{errorMsg}, sysdate())
 	</insert>
 	
-	<select id="selectOperLogList" parameterType="OperLog" resultMap="OperLogResult">
+	<select id="selectOperLogList" parameterType="SysOperLog" resultMap="SysOperLogResult">
 		<include refid="selectOperLogVo"/>
 		<where>
 			<if test="title != null and title != ''">
@@ -59,7 +59,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach> 
  	</delete>
  	
- 	<select id="selectOperLogById" parameterType="Long" resultMap="OperLogResult">
+ 	<select id="selectOperLogById" parameterType="Long" resultMap="SysOperLogResult">
 		<include refid="selectOperLogVo"/>
 		where oper_id = #{operId}
 	</select>
diff --git a/src/main/resources/mybatis/system/PostMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml
similarity index 85%
rename from src/main/resources/mybatis/system/PostMapper.xml
rename to ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml
index 3b70deaa..4a009846 100644
--- a/src/main/resources/mybatis/system/PostMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.system.post.mapper.PostMapper">
+<mapper namespace="com.ruoyi.system.mapper.SysPostMapper">
 
-	<resultMap type="Post" id="PostResult">
+	<resultMap type="SysPost" id="SysPostResult">
 		<id     property="postId"        column="post_id"       />
 		<result property="postCode"      column="post_code"     />
 		<result property="postName"      column="post_name"     />
@@ -22,7 +22,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		from sys_post
     </sql>
 	
-	<select id="selectPostList" parameterType="Post" resultMap="PostResult">
+	<select id="selectPostList" parameterType="SysPost" resultMap="SysPostResult">
 	    <include refid="selectPostVo"/>
 		<where>
 			<if test="postCode != null and postCode != ''">
@@ -37,11 +37,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		</where>
 	</select>
 	
-	<select id="selectPostAll" resultMap="PostResult">
+	<select id="selectPostAll" resultMap="SysPostResult">
 		<include refid="selectPostVo"/>
 	</select>
 	
-	<select id="selectPostsByUserId" parameterType="Long" resultMap="PostResult">
+	<select id="selectPostsByUserId" parameterType="Long" resultMap="SysPostResult">
 		SELECT p.post_id, p.post_name, p.post_code
 		FROM sys_user u
 			 LEFT JOIN sys_user_post up ON u.user_id = up.user_id
@@ -49,17 +49,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		WHERE up.user_id = #{userId}
 	</select>
 	
-	<select id="selectPostById" parameterType="Long" resultMap="PostResult">
+	<select id="selectPostById" parameterType="Long" resultMap="SysPostResult">
 		<include refid="selectPostVo"/>
 		where post_id = #{postId}
 	</select>
 	
-	<select id="checkPostNameUnique" parameterType="String" resultMap="PostResult">
+	<select id="checkPostNameUnique" parameterType="String" resultMap="SysPostResult">
 		<include refid="selectPostVo"/>
 		 where post_name=#{postName}
 	</select>
 	
-	<select id="checkPostCodeUnique" parameterType="String" resultMap="PostResult">
+	<select id="checkPostCodeUnique" parameterType="String" resultMap="SysPostResult">
 		<include refid="selectPostVo"/>
 		 where post_code=#{postCode}
 	</select>
@@ -71,7 +71,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach> 
  	</delete>
  	
- 	<update id="updatePost" parameterType="Post">
+ 	<update id="updatePost" parameterType="SysPost">
  		update sys_post
  		<set>
  			<if test="postCode != null and postCode != ''">post_code = #{postCode},</if>
@@ -85,7 +85,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  		where post_id = #{postId}
 	</update>
  	
- 	<insert id="insertPost" parameterType="Post" useGeneratedKeys="true" keyProperty="postId">
+ 	<insert id="insertPost" parameterType="SysPost" useGeneratedKeys="true" keyProperty="postId">
  		insert into sys_post(
  			<if test="postId != null and postId != 0">post_id,</if>
  			<if test="postCode != null and postCode != ''">post_code,</if>
diff --git a/src/main/resources/mybatis/system/RoleDeptMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml
similarity index 85%
rename from src/main/resources/mybatis/system/RoleDeptMapper.xml
rename to ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml
index 84dbc875..cfbfd48b 100644
--- a/src/main/resources/mybatis/system/RoleDeptMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.system.role.mapper.RoleDeptMapper">
+<mapper namespace="com.ruoyi.system.mapper.SysRoleDeptMapper">
 
-	<resultMap type="RoleDept" id="RoleDeptResult">
+	<resultMap type="SysRoleDept" id="SysRoleDeptResult">
 		<result property="roleId"     column="role_id"      />
 		<result property="detpId"     column="dept_id"      />
 	</resultMap>
diff --git a/src/main/resources/mybatis/system/RoleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
similarity index 89%
rename from src/main/resources/mybatis/system/RoleMapper.xml
rename to ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
index 94ab02b0..3d89ae88 100644
--- a/src/main/resources/mybatis/system/RoleMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.system.role.mapper.RoleMapper">
+<mapper namespace="com.ruoyi.system.mapper.SysRoleMapper">
 
-	<resultMap type="Role" id="RoleResult">
+	<resultMap type="SysRole" id="SysRoleResult">
 		<id     property="roleId"       column="role_id"        />
 		<result property="roleName"     column="role_name"      />
 		<result property="roleKey"      column="role_key"       />
@@ -33,7 +33,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         from sys_role r
 	</sql>
 	
-	<select id="selectRoleList" parameterType="Role" resultMap="RoleResult">
+	<select id="selectRoleList" parameterType="SysRole" resultMap="SysRoleResult">
 		<include refid="selectRoleContactVo"/>
 		where r.del_flag = '0'
 		<if test="roleName != null and roleName != ''">
@@ -58,22 +58,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		${params.dataScope}
 	</select>
 
-	<select id="selectRolesByUserId" parameterType="Long" resultMap="RoleResult">
+	<select id="selectRolesByUserId" parameterType="Long" resultMap="SysRoleResult">
 		<include refid="selectRoleContactVo"/>
 		WHERE r.del_flag = '0' and ur.user_id = #{userId}
 	</select>
 	
-	<select id="selectRoleById" parameterType="Long" resultMap="RoleResult">
+	<select id="selectRoleById" parameterType="Long" resultMap="SysRoleResult">
 		<include refid="selectRoleVo"/>
 		where r.del_flag = '0' and r.role_id = #{roleId}
 	</select>
 	
-	<select id="checkRoleNameUnique" parameterType="String" resultMap="RoleResult">
+	<select id="checkRoleNameUnique" parameterType="String" resultMap="SysRoleResult">
 		<include refid="selectRoleVo"/>
 		 where r.role_name=#{roleName}
 	</select>
 	
-	<select id="checkRoleKeyUnique" parameterType="String" resultMap="RoleResult">
+	<select id="checkRoleKeyUnique" parameterType="String" resultMap="SysRoleResult">
 		<include refid="selectRoleVo"/>
 		 where r.role_key=#{roleKey}
 	</select>
@@ -89,7 +89,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach> 
  	</delete>
  	
- 	<update id="updateRole" parameterType="Role">
+ 	<update id="updateRole" parameterType="SysRole">
  		update sys_role
  		<set>
  			<if test="roleName != null and roleName != ''">role_name = #{roleName},</if>
@@ -104,7 +104,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  		where role_id = #{roleId}
 	</update>
  	
- 	<insert id="insertRole" parameterType="Role" useGeneratedKeys="true" keyProperty="roleId">
+ 	<insert id="insertRole" parameterType="SysRole" useGeneratedKeys="true" keyProperty="roleId">
  		insert into sys_role(
  			<if test="roleId != null and roleId != 0">role_id,</if>
  			<if test="roleName != null and roleName != ''">role_name,</if>
diff --git a/src/main/resources/mybatis/system/RoleMenuMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml
similarity index 85%
rename from src/main/resources/mybatis/system/RoleMenuMapper.xml
rename to ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml
index dc036be4..f509d207 100644
--- a/src/main/resources/mybatis/system/RoleMenuMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.system.role.mapper.RoleMenuMapper">
+<mapper namespace="com.ruoyi.system.mapper.SysRoleMenuMapper">
 
-	<resultMap type="RoleMenu" id="RoleMenuResult">
+	<resultMap type="SysRoleMenu" id="SysRoleMenuResult">
 		<result property="roleId"     column="role_id"      />
 		<result property="menuId"     column="menu_id"      />
 	</resultMap>
diff --git a/src/main/resources/mybatis/system/UserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
similarity index 90%
rename from src/main/resources/mybatis/system/UserMapper.xml
rename to ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index 50808aef..96b99bad 100644
--- a/src/main/resources/mybatis/system/UserMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.system.user.mapper.UserMapper">
+<mapper namespace="com.ruoyi.system.mapper.SysUserMapper">
 
-	<resultMap type="User" id="UserResult">
+	<resultMap type="SysUser" id="SysUserResult">
 		<id     property="userId"       column="user_id"      />
 		<result property="deptId"       column="dept_id"      />
 		<result property="loginName"    column="login_name"   />
@@ -24,11 +24,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="updateBy"     column="update_by"    />
 		<result property="updateTime"   column="update_time"  />
 		<result property="remark"       column="remark"       />
-		<association property="dept"    column="dept_id" javaType="Dept" resultMap="deptResult" />
+		<association property="dept"    column="dept_id" javaType="SysDept" resultMap="deptResult" />
 		<collection  property="roles"   javaType="java.util.List"        resultMap="RoleResult" />
 	</resultMap>
 	
-	<resultMap id="deptResult" type="Dept">
+	<resultMap id="deptResult" type="SysDept">
 		<id     property="deptId"   column="dept_id"     />
 		<result property="parentId" column="parent_id"   />
 		<result property="deptName" column="dept_name"   />
@@ -36,7 +36,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="status"   column="dept_status" />
 	</resultMap>
 	
-	<resultMap id="RoleResult" type="Role">
+	<resultMap id="RoleResult" type="SysRole">
 		<id     property="roleId"       column="role_id"        />
 		<result property="roleName"     column="role_name"      />
 		<result property="roleKey"      column="role_key"       />
@@ -55,7 +55,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 			 left join sys_role r on r.role_id = ur.role_id
     </sql>
 	
-	<select id="selectUserList" parameterType="User" resultMap="UserResult">
+	<select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
 		select u.user_id, u.dept_id, u.login_name, u.user_name, u.email, u.phonenumber, u.password, u.sex, u.avatar, u.salt, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name from sys_user u
 		left join sys_dept d on u.dept_id = d.dept_id
 		where u.del_flag = '0'
@@ -81,17 +81,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		${params.dataScope}
 	</select>
 	
-	<select id="selectUserByLoginName" parameterType="String" resultMap="UserResult">
+	<select id="selectUserByLoginName" parameterType="String" resultMap="SysUserResult">
 	    <include refid="selectUserVo"/>
 		where u.login_name = #{userName}
 	</select>
 	
-	<select id="selectUserByPhoneNumber" parameterType="String" resultMap="UserResult">
+	<select id="selectUserByPhoneNumber" parameterType="String" resultMap="SysUserResult">
 		<include refid="selectUserVo"/>
 		where u.phonenumber = #{phonenumber}
 	</select>
 	
-	<select id="selectUserByEmail" parameterType="String" resultMap="UserResult">
+	<select id="selectUserByEmail" parameterType="String" resultMap="SysUserResult">
 	    <include refid="selectUserVo"/>
 		where u.email = #{email}
 	</select>
@@ -100,15 +100,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		select count(1) from sys_user where login_name=#{loginName}
 	</select>
 	
-	<select id="checkPhoneUnique" parameterType="String" resultMap="UserResult">
+	<select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
 		select user_id, phonenumber from sys_user where phonenumber=#{phonenumber}
 	</select>
 	
-	<select id="checkEmailUnique" parameterType="String" resultMap="UserResult">
+	<select id="checkEmailUnique" parameterType="String" resultMap="SysUserResult">
 		select user_id, email from sys_user where email=#{email}
 	</select>
 	
-	<select id="selectUserById" parameterType="Long" resultMap="UserResult">
+	<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
 		<include refid="selectUserVo"/>
 		where u.user_id = #{userId}
 	</select>
@@ -124,7 +124,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach> 
  	</delete>
  	
- 	<update id="updateUser" parameterType="User">
+ 	<update id="updateUser" parameterType="SysUser">
  		update sys_user
  		<set>
  			<if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
@@ -146,7 +146,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  		where user_id = #{userId}
 	</update>
  	
- 	<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="userId">
+ 	<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
  		insert into sys_user(
  			<if test="userId != null and userId != 0">user_id,</if>
  			<if test="deptId != null and deptId != 0">dept_id,</if>
diff --git a/src/main/resources/mybatis/monitor/OnlineMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserOnlineMapper.xml
similarity index 72%
rename from src/main/resources/mybatis/monitor/OnlineMapper.xml
rename to ruoyi-system/src/main/resources/mapper/system/SysUserOnlineMapper.xml
index a0e8a997..c91025d9 100644
--- a/src/main/resources/mybatis/monitor/OnlineMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserOnlineMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.monitor.online.mapper.UserOnlineMapper">
+<mapper namespace="com.ruoyi.system.mapper.SysUserOnlineMapper">
 
-	<resultMap type="UserOnline" id="UserOnlineResult">
+	<resultMap type="SysUserOnline" id="SysUserOnlineResult">
 		<id     property="sessionId"         column="sessionId"         />
 		<result property="loginName"         column="login_name"        />
 		<result property="deptName"          column="dept_name"         />
@@ -16,14 +16,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="startTimestamp"    column="start_timestamp"   />
 		<result property="lastAccessTime"    column="last_access_time"  />
 		<result property="expireTime"        column="expire_time"       />
-		<association property="session" javaType="OnlineSession" resultMap="OnlineSessionResult" />
-	</resultMap>
-	
-	<resultMap type="OnlineSession" id="OnlineSessionResult">
-		<result property="host"              column="ipaddr"            />
-		<result property="browser"           column="browser"           />
-		<result property="os"                column="os"                />
-		<result property="status"            column="status"            />
 	</resultMap>
 	
 	<sql id="selectOnlineVo">
@@ -31,12 +23,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	   from sys_user_online
     </sql>
     
-	<select id="selectOnlineById" parameterType="String" resultMap="UserOnlineResult">
+	<select id="selectOnlineById" parameterType="String" resultMap="SysUserOnlineResult">
 		<include refid="selectOnlineVo"/>
 		where sessionid = #{sessionid}
 	</select>
 
-	<insert id="saveOnline" parameterType="UserOnline">
+	<insert id="saveOnline" parameterType="SysUserOnline">
 		replace into sys_user_online(sessionId, login_name, dept_name, ipaddr, login_location, browser, os, status, start_timestamp, last_access_time, expire_time)
         values (#{sessionId}, #{loginName}, #{deptName}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{status}, #{startTimestamp}, #{lastAccessTime}, #{expireTime})
 	</insert>
@@ -45,7 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  		delete from sys_user_online where sessionId = #{sessionId}
  	</delete>
  	
- 	<select id="selectUserOnlineList" parameterType="UserOnline" resultMap="UserOnlineResult">
+ 	<select id="selectUserOnlineList" parameterType="SysUserOnline" resultMap="SysUserOnlineResult">
 		<include refid="selectOnlineVo"/>
 		<where>
 			<if test="ipaddr != null and ipaddr != ''">
@@ -57,7 +49,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		</where>
 	</select>
 	
-	<select id="selectOnlineByExpired" parameterType="String" resultMap="UserOnlineResult">
+	<select id="selectOnlineByExpired" parameterType="String" resultMap="SysUserOnlineResult">
 		<include refid="selectOnlineVo"/> o 
 		WHERE o.last_access_time <![CDATA[ <= ]]> #{lastAccessTime} ORDER BY o.last_access_time ASC
 	</select>
diff --git a/src/main/resources/mybatis/system/UserPostMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml
similarity index 85%
rename from src/main/resources/mybatis/system/UserPostMapper.xml
rename to ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml
index 47c04cca..21c40981 100644
--- a/src/main/resources/mybatis/system/UserPostMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.system.user.mapper.UserPostMapper">
+<mapper namespace="com.ruoyi.system.mapper.SysUserPostMapper">
 
-	<resultMap type="UserPost" id="UserPostResult">
+	<resultMap type="SysUserPost" id="SysUserPostResult">
 		<result property="userId"     column="user_id"      />
 		<result property="postId"     column="post_id"      />
 	</resultMap>
diff --git a/src/main/resources/mybatis/system/UserRoleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml
similarity index 85%
rename from src/main/resources/mybatis/system/UserRoleMapper.xml
rename to ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml
index 98ea1730..42aa7671 100644
--- a/src/main/resources/mybatis/system/UserRoleMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml
@@ -2,9 +2,9 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ruoyi.project.system.user.mapper.UserRoleMapper">
+<mapper namespace="com.ruoyi.system.mapper.SysUserRoleMapper">
 
-	<resultMap type="UserRole" id="UserRoleResult">
+	<resultMap type="SysUserRole" id="SysUserRoleResult">
 		<result property="userId"     column="user_id"      />
 		<result property="roleId"     column="role_id"      />
 	</resultMap>
diff --git a/ry.sh b/ry.sh
deleted file mode 100644
index 55adaf89..00000000
--- a/ry.sh
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/bin/bash
-
-AppName=RuoYi.jar
-
-#JVM参数
-JVM_OPTS="-Dname=$AppName  -Duser.timezone=Asia/Shanghai -Xms512M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps  -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
-APP_HOME=`pwd`
-LOG_PATH=$APP_HOME/logs/$AppName.log
-
-if [ "$1" = "" ];
-then
-    echo -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status} \033[0m"
-    exit 1
-fi
-
-if [ "$AppName" = "" ];
-then
-    echo -e "\033[0;31m 未输入应用名 \033[0m"
-    exit 1
-fi
-
-function start()
-{
-    PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
-
-	if [ x"$PID" != x"" ]; then
-	    echo "$AppName is running..."
-	else
-		nohup java -jar  $JVM_OPTS target/$AppName > /dev/null 2>&1 &
-		echo "Start $AppName success..."
-	fi
-}
-
-function stop()
-{
-    echo "Stop $AppName"
-	
-	PID=""
-	query(){
-		PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
-	}
-
-	query
-	if [ x"$PID" != x"" ]; then
-		kill -TERM $PID
-		echo "$AppName (pid:$PID) exiting..."
-		while [ x"$PID" != x"" ]
-		do
-			sleep 1
-			query
-		done
-		echo "$AppName exited."
-	else
-		echo "$AppName already stopped."
-	fi
-}
-
-function restart()
-{
-    stop
-    sleep 2
-    start
-}
-
-function status()
-{
-    PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
-    if [ $PID != 0 ];then
-        echo "$AppName is running..."
-    else
-        echo "$AppName is not running..."
-    fi
-}
-
-case $1 in
-    start)
-    start;;
-    stop)
-    stop;;
-    restart)
-    restart;;
-    status)
-    status;;
-    *)
-
-esac
diff --git a/sql/ruoyi.pdb b/sql/ruoyi.pdb
new file mode 100644
index 00000000..9dbddc69
--- /dev/null
+++ b/sql/ruoyi.pdb
@@ -0,0 +1,4851 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?PowerDesigner AppLocale="UTF16" ID="{21C20947-ED50-4632-B638-DC1A02BD948A}" Label="" LastModificationDate="1538297772" Name="ruoyi" Objects="216" Symbols="20" Target="MySQL 5.0" Type="{CDE44E21-9669-11D1-9914-006097355D9B}" signature="PDM_DATA_MODEL_XML" version="15.1.0.2850"?>
+<!-- do not edit this file -->
+
+<Model xmlns:a="attribute" xmlns:c="collection" xmlns:o="object">
+
+<o:RootObject Id="o1">
+<c:Children>
+<o:Model Id="o2">
+<a:ObjectID>21C20947-ED50-4632-B638-DC1A02BD948A</a:ObjectID>
+<a:Name>ruoyi</a:Name>
+<a:Code>ruoyi</a:Code>
+<a:CreationDate>1524449337</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297587</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:PackageOptionsText>[FolderOptions]
+
+[FolderOptions\Physical Objects]
+GenerationCheckModel=Yes
+GenerationPath=
+GenerationOptions=
+GenerationTasks=
+GenerationTargets=
+GenerationSelections=
+RevPkey=Yes
+RevFkey=Yes
+RevAkey=Yes
+RevCheck=Yes
+RevIndx=Yes
+RevOpts=Yes
+RevViewAsTabl=No
+RevViewOpts=Yes
+RevSystAsTabl=Yes
+RevTablPerm=No
+RevViewPerm=No
+RevProcPerm=No
+RevDbpkPerm=No
+RevSqncPerm=No
+RevAdtPerm=No
+RevUserPriv=No
+RevUserOpts=No
+RevGrpePriv=No
+RevRolePriv=No
+RevDtbsOpts=Yes
+RevDtbsPerm=No
+RevViewIndx=Yes
+RevJidxOpts=Yes
+RevStats=No
+RevTspcPerm=No
+RevCaseSensitive=No
+GenTrgrStdMsg=Yes
+GenTrgrMsgTab=
+GenTrgrMsgNo=
+GenTrgrMsgTxt=
+TrgrPreserve=No
+TrgrIns=Yes
+TrgrUpd=Yes
+TrgrDel=Yes
+TrgrC2Ins=Yes
+TrgrC2Upd=Yes
+TrgrC3=Yes
+TrgrC4=Yes
+TrgrC5=Yes
+TrgrC6=Yes
+TrgrC7=Yes
+TrgrC8=Yes
+TrgrC9=Yes
+TrgrC10=Yes
+TrgrC11=Yes
+TrgrC1=Yes
+TrgrC12Ins=Yes
+TrgrC12Upd=Yes
+TrgrC13=Yes
+UpdateTableStatistics=Yes
+UpdateColumnStatistics=Yes
+
+[FolderOptions\Physical Objects\Database Generation]
+GenScriptName=orders.sql
+GenScriptName0=orders.sql
+GenScriptName1=studentsystem.sql
+GenScriptName2=NetCTOSS.sql
+GenScriptName3=product.sql
+GenScriptName4=voteSystem.sql
+GenScriptName5=.sql
+GenScriptName6=enterpriseManagement.sql
+GenScriptName7=crebas.sql
+GenScriptName8=
+GenScriptName9=
+GenPathName=C:\Users\Administrator\Desktop\
+GenSingleFile=Yes
+GenODBC=No
+GenCheckModel=Yes
+GenScriptPrev=Yes
+GenArchiveModel=No
+GenUseSync=No
+GenSyncChoice=0
+GenSyncArch=
+GenSyncRmg=0
+
+[FolderOptions\Physical Objects\Database Generation\Format]
+GenScriptTitle=Yes
+GenScriptNamLabl=No
+GenScriptQDtbs=No
+GenScriptQOwnr=Yes
+GenScriptCase=0
+GenScriptEncoding=ANSI
+GenScriptNAcct=No
+IdentifierDelimiter=&quot;
+
+[FolderOptions\Physical Objects\Database Generation\Database]
+Create=Yes
+Open=Yes
+Close=Yes
+Drop=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Database\Create]
+Physical Options=Yes
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Tablespace]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Tablespace\Create]
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Storage]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\User]
+Create=Yes
+Grant=Yes
+Drop=Yes
+Comment=Yes
+Privilege=No
+
+[FolderOptions\Physical Objects\Database Generation\User\Create]
+Physical Options=No
+
+[FolderOptions\Physical Objects\Database Generation\Group]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Privilege=No
+
+[FolderOptions\Physical Objects\Database Generation\Role]
+Create=Yes
+Drop=Yes
+Privilege=No
+
+[FolderOptions\Physical Objects\Database Generation\UserDefinedDataType]
+Create=Yes
+Comment=Yes
+Drop=Yes
+
+[FolderOptions\Physical Objects\Database Generation\UserDefinedDataType\Create]
+Default value=Yes
+Check=Yes
+
+[FolderOptions\Physical Objects\Database Generation\AbstractDataType]
+Create=Yes
+Header=Yes
+Footer=Yes
+Drop=Yes
+Comment=Yes
+Install JAVA class=Yes
+Remove JAVA class=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Rule]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Default]
+Create=Yes
+Comment=Yes
+Drop=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Sequence]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column]
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Table]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Table\Create]
+Check=Yes
+Physical Options=Yes
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Table\Create\Check]
+Constraint declaration=No
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Column]
+User datatype=No
+Default value=Yes
+Check=Yes
+Physical Options=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Column\Check]
+Constraint declaration=No
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Key]
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Key\Primary key]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Key\Primary key\Create]
+Constraint declaration=No
+Physical Options=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Key\Alternate key]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Key\Alternate key\Create]
+Constraint declaration=No
+Physical Options=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Foreign key]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Foreign key\Create]
+Constraint declaration=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Index]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Index\Create]
+Constraint declaration=Yes
+Physical Options=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Index\Filter]
+Primary key=No
+Foreign key=No
+Alternate key=No
+Cluster=Yes
+Other=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Trigger]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Table&amp;&amp;Column\Trigger\Filter]
+For insert=Yes
+For update=Yes
+For delete=Yes
+For other=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\View\Create]
+Force Column list=No
+Physical Options=Yes
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\ViewColumn]
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\ViewIndex]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\ViewIndex\Create]
+Physical Options=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\ViewIndex\Filter]
+Cluster=Yes
+Other=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\Trigger]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\View\Trigger\Filter]
+For insert=Yes
+For update=Yes
+For delete=Yes
+For other=Yes
+
+[FolderOptions\Physical Objects\Database Generation\DBMSTrigger]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Synonym]
+Create=Yes
+Drop=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Synonym\Filter]
+Table=Yes
+View=Yes
+Proc=Yes
+Synonym=Yes
+Database Package=Yes
+Sequence=Yes
+
+[FolderOptions\Physical Objects\Database Generation\JoinIndex]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\JoinIndex\Create]
+Physical Options=Yes
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Procedure]
+Create=Yes
+Drop=Yes
+Comment=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\Procedure\Create]
+Header=Yes
+Footer=Yes
+
+[FolderOptions\Physical Objects\Database Generation\DatabasePackage]
+Create=Yes
+Drop=Yes
+Permission=No
+
+[FolderOptions\Physical Objects\Database Generation\WebService]
+Create=Yes
+Drop=Yes
+Comment=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Dimension]
+Create=Yes
+Drop=Yes
+
+[FolderOptions\Physical Objects\Database Generation\Synchronization]
+GenBackupTabl=1
+GenKeepBackTabl=1
+GenTmpTablDrop=No
+GenKeepTablOpts=No
+
+[FolderOptions\Physical Objects\Test Data]
+GenDataPathName=
+GenDataSinglefile=Yes
+GenDataScriptName=testdata
+GenDataScriptName0=
+GenDataScriptName1=
+GenDataScriptName2=
+GenDataScriptName3=
+GenDataScriptName4=
+GenDataScriptName5=
+GenDataScriptName6=
+GenDataScriptName7=
+GenDataScriptName8=
+GenDataScriptName9=
+GenDataOdbc=0
+GenDataDelOld=No
+GenDataTitle=No
+GenDataDefNumRows=20
+GenDataCommit=0
+GenDataPacket=0
+GenDataOwner=No
+GenDataProfNumb=
+GenDataProfChar=
+GenDataProfDate=
+GenDataCSVSeparator=,
+GenDataFileFormat=CSV
+GenDataUseWizard=No
+
+[FolderOptions\Pdm]
+IndxIQName=%COLUMN%_%INDEXTYPE%
+IndxPK=Yes
+IndxFK=Yes
+IndxAK=Yes
+IndxPKName=%TABLE%_PK
+IndxFKName=%REFR%_FK
+IndxAKName=%AKEY%_AK
+IndxPreserve=No
+IndxThreshold=0
+IndxStats=No
+RefrPreserve=No
+JidxPreserve=No
+RbldMultiFact=Yes
+RbldMultiDim=Yes
+RbldMultiJidx=Yes
+CubePreserve=No
+TablStProcPreserve=No
+ProcDepPreserve=Yes
+TrgrDepPreserve=Yes
+CubeScriptPath=
+CubeScriptCase=0
+CubeScriptEncoding=ANSI
+CubeScriptNacct=No
+CubeScriptHeader=No
+CubeScriptExt=csv
+CubeScriptExt0=txt
+CubeScriptExt1=
+CubeScriptExt2=
+CubeScriptSep=,
+CubeScriptDeli=&quot;
+DfltDomnName=D_%.U:VALUE%
+DfltColnName=D_%.U:VALUE%
+DfltReuse=Yes
+DfltDrop=Yes</a:PackageOptionsText>
+<a:ModelOptionsText>[ModelOptions]
+
+[ModelOptions\Physical Objects]
+CaseSensitive=No
+DisplayName=Yes
+EnableTrans=No
+EnableRequirements=No
+DefaultDttp=
+IgnoreOwner=No
+RebuildTrigger=Yes
+RefrUnique=No
+RefrAutoMigrate=Yes
+RefrMigrateReuse=Yes
+RefrMigrateDomain=Yes
+RefrMigrateCheck=Yes
+RefrMigrateRule=Yes
+RefrMigrateExtd=No
+RefrMigrDefaultLink=No
+RefrDfltImpl=D
+RefrPrgtColn=No
+RefrMigrateToEnd=No
+RebuildTriggerDep=No
+ColnFKName=%.3:PARENT%_%COLUMN%
+ColnFKNameUse=No
+DomnCopyDttp=Yes
+DomnCopyChck=No
+DomnCopyRule=No
+DomnCopyMand=No
+DomnCopyExtd=No
+DomnCopyProf=No
+Notation=0
+DomnDefaultMandatory=No
+ColnDefaultMandatory=No
+TablDefaultOwner=
+ViewDefaultOwner=
+TrgrDefaultOwnerTabl=
+TrgrDefaultOwnerView=
+IdxDefaultOwnerTabl=
+IdxDefaultOwnerView=
+JdxDefaultOwner=
+DBPackDefaultOwner=
+SeqDefaultOwner=
+ProcDefaultOwner=
+DBMSTrgrDefaultOwner=
+Currency=USD
+RefrDeleteConstraint=1
+RefrUpdateConstraint=1
+RefrParentMandatory=No
+RefrParentChangeAllow=Yes
+RefrCheckOnCommit=No
+
+[ModelOptions\Physical Objects\NamingOptionsTemplates]
+
+[ModelOptions\Physical Objects\ClssNamingOptions]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMPCKG]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMPCKG\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMPCKG\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMDOMN]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMDOMN\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\PDMDOMN\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\TABL]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\TABL\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\TABL\Code]
+Template=
+MaxLen=64
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\COLN]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\COLN\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\COLN\Code]
+Template=
+MaxLen=64
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\INDX]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\INDX\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\INDX\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\REFR]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\REFR\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\REFR\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VREF]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VREF\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VREF\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEW]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEW\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEW\Code]
+Template=
+MaxLen=64
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEWC]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEWC\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\VIEWC\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBSERV]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBSERV\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBSERV\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=&#39;a&#39;-&#39;z&#39;,&#39;A&#39;-&#39;Z&#39;,&#39;0&#39;-&#39;9&#39;,&quot;/-_.!~*&#39;()&quot;
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBOP]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBOP\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WEBOP\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=&#39;a&#39;-&#39;z&#39;,&#39;A&#39;-&#39;Z&#39;,&#39;0&#39;-&#39;9&#39;,&quot;/-_.!~*&#39;()&quot;
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WPARAM]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WPARAM\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\WPARAM\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FACT]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FACT\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FACT\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DIMN]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DIMN\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DIMN\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\CUBE]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\CUBE\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\CUBE\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\MEAS]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\MEAS\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\MEAS\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DATTR]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DATTR\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DATTR\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FILO]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FILO\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FILO\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMEOBJ]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMEOBJ\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMEOBJ\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMELNK]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMELNK\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\FRMELNK\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DefaultClass]
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DefaultClass\Name]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Physical Objects\ClssNamingOptions\DefaultClass\Code]
+Template=
+MaxLen=254
+Case=M
+ValidChar=
+InvldChar=
+AllValid=Yes
+NoAccent=No
+DefaultChar=
+Script=
+ConvTable=
+ConvTablePath=%_HOME%\Resource Files\Conversion Tables
+
+[ModelOptions\Connection]
+
+[ModelOptions\Pdm]
+
+[ModelOptions\Generate]
+
+[ModelOptions\Generate\Pdm]
+RRMapping=No
+
+[ModelOptions\Generate\Cdm]
+CheckModel=Yes
+SaveLinks=Yes
+NameToCode=No
+Notation=2
+
+[ModelOptions\Generate\Oom]
+CheckModel=Yes
+SaveLinks=Yes
+ORMapping=No
+NameToCode=Yes
+ClassPrefix=
+
+[ModelOptions\Generate\Xsm]
+CheckModel=Yes
+SaveLinks=Yes
+ORMapping=No
+NameToCode=No
+
+[ModelOptions\Generate\Ldm]
+CheckModel=Yes
+SaveLinks=Yes
+NameToCode=No
+
+[ModelOptions\Default Opts]
+
+[ModelOptions\Default Opts\TABL]
+PhysOpts=
+
+[ModelOptions\Default Opts\COLN]
+PhysOpts=
+
+[ModelOptions\Default Opts\INDX]
+PhysOpts=
+
+[ModelOptions\Default Opts\AKEY]
+PhysOpts=
+
+[ModelOptions\Default Opts\PKEY]
+PhysOpts=
+
+[ModelOptions\Default Opts\STOR]
+PhysOpts=
+
+[ModelOptions\Default Opts\TSPC]
+PhysOpts=
+
+[ModelOptions\Default Opts\SQNC]
+PhysOpts=
+
+[ModelOptions\Default Opts\DTBS]
+PhysOpts=
+
+[ModelOptions\Default Opts\USER]
+PhysOpts=
+
+[ModelOptions\Default Opts\JIDX]
+PhysOpts=</a:ModelOptionsText>
+<c:DBMS>
+<o:Shortcut Id="o3">
+<a:ObjectID>AFAD9ECF-F417-4FCE-BEA4-884857D4C1A9</a:ObjectID>
+<a:Name>MySQL 5.0</a:Name>
+<a:Code>MYSQL50</a:Code>
+<a:CreationDate>1524449337</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449337</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:TargetStereotype/>
+<a:TargetID>F4F16ECD-F2F1-4006-AF6F-638D5C65F35E</a:TargetID>
+<a:TargetClassID>4BA9F647-DAB1-11D1-9944-006097355D9B</a:TargetClassID>
+</o:Shortcut>
+</c:DBMS>
+<c:PhysicalDiagrams>
+<o:PhysicalDiagram Id="o4">
+<a:ObjectID>B6C2C4A4-6A8A-41F3-909D-C7B514E1EAE2</a:ObjectID>
+<a:Name>PhysicalDiagram_1</a:Name>
+<a:Code>PhysicalDiagram_1</a:Code>
+<a:CreationDate>1524449325</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297386</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:DisplayPreferences>[DisplayPreferences]
+
+[DisplayPreferences\PDM]
+
+[DisplayPreferences\General]
+Adjust to text=Yes
+Snap Grid=No
+Constrain Labels=Yes
+Display Grid=No
+Show Page Delimiter=Yes
+Grid size=0
+Graphic unit=2
+Window color=255, 255, 255
+Background image=
+Background mode=8
+Watermark image=
+Watermark mode=8
+Show watermark on screen=No
+Gradient mode=0
+Gradient end color=255, 255, 255
+Show Swimlane=No
+SwimlaneVert=Yes
+TreeVert=No
+CompDark=0
+
+[DisplayPreferences\Object]
+Mode=0
+Trunc Length=80
+Word Length=80
+Word Text=!&quot;&quot;#$%&amp;&#39;()*+,-./:;&lt;=&gt;?@[\]^_`{|}~
+Shortcut IntIcon=Yes
+Shortcut IntLoct=Yes
+Shortcut IntFullPath=No
+Shortcut IntLastPackage=Yes
+Shortcut ExtIcon=Yes
+Shortcut ExtLoct=No
+Shortcut ExtFullPath=No
+Shortcut ExtLastPackage=Yes
+Shortcut ExtIncludeModl=Yes
+EObjShowStrn=Yes
+ExtendedObject.Comment=No
+ExtendedObject.IconPicture=No
+ExtendedObject_SymbolLayout=&lt;Form&gt;[CRLF] &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Object Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF] &lt;Separator Name=&quot;Separator&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Comment&quot; Attribute=&quot;Comment&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;LEFT&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Icon&quot; Attribute=&quot;IconPicture&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF]&lt;/Form&gt;
+ELnkShowStrn=Yes
+ELnkShowName=Yes
+ExtendedLink_SymbolLayout=&lt;Form&gt;[CRLF] &lt;Form Name=&quot;Center&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Source&quot; &gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Destination&quot; &gt;[CRLF] &lt;/Form&gt;[CRLF]&lt;/Form&gt;
+FileObject.Stereotype=No
+FileObject.DisplayName=Yes
+FileObject.LocationOrName=No
+FileObject.IconPicture=No
+FileObject.IconMode=Yes
+FileObject_SymbolLayout=&lt;Form&gt;[CRLF] &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;Yes&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Location&quot; Attribute=&quot;LocationOrName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/ExclusiveChoice&gt;[CRLF] &lt;StandardAttribute Name=&quot;Icon&quot; Attribute=&quot;IconPicture&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF]&lt;/Form&gt;
+PckgShowStrn=Yes
+Package.Comment=No
+Package.IconPicture=No
+Package_SymbolLayout=
+Display Model Version=Yes
+Table.Stereotype=Yes
+Table.DisplayName=Yes
+Table.OwnerDisplayName=No
+Table.Columns=Yes
+Table.Columns._Filter=&quot;&quot;PDMCOLNALL
+Table.Columns._Columns=Stereotype DataType KeyIndicator
+Table.Columns._Limit=-5
+Table.Keys=No
+Table.Keys._Columns=Stereotype Indicator
+Table.Indexes=No
+Table.Indexes._Columns=Stereotype
+Table.Triggers=No
+Table.Triggers._Columns=Stereotype
+Table.Comment=No
+Table.IconPicture=No
+Table_SymbolLayout=&lt;Form&gt;[CRLF] &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;Yes&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Owner and Name&quot; Attribute=&quot;OwnerDisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/ExclusiveChoice&gt;[CRLF] &lt;Separator Name=&quot;Separator&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Columns&quot; Collection=&quot;Columns&quot; Columns=&quot;Stereotype No\r\nDisplayName Yes\r\nDataType No\r\nSymbolDataType No &amp;quot;Domain or Data type&amp;quot;\r\nDomain No\r\nKeyIndicator No\r\nIndexIndicator No\r\nNullStatus No&quot; Filters=&quot;&amp;quot;All Columns&amp;quot;  PDMCOLNALL &amp;quot;&amp;quot;\r\n&amp;quot;PK Columns&amp;quot;  PDMCOLNPK &amp;quot;PRIM \&amp;quot;TRUE\&amp;quot; TRUE&amp;quot;\r\n&amp;quot;Key Columns&amp;quot;  PDMCOLNKEY &amp;quot;KEYS \&amp;quot;TRUE\&amp;quot; TRUE&amp;quot;&quot; HasLimit=&quot;Yes&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Keys&quot; Collection=&quot;Keys&quot; Columns=&quot;Stereotype No\r\nDisplayName Yes\r\nIndicator No&quot; HasLimit=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Indexes&quot; Collection=&quot;Indexes&quot; Columns=&quot;Stereotype No\r\nDisplayName Yes\r\nIndicator No&quot; HasLimit=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Triggers&quot; Collection=&quot;Triggers&quot; Columns=&quot;Stereotype No\r\nDisplayName Yes&quot; HasLimit=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Comment&quot; Attribute=&quot;Comment&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;LEFT&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Icon&quot; Attribute=&quot;IconPicture&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF]&lt;/Form&gt;
+View.Stereotype=Yes
+View.DisplayName=Yes
+View.OwnerDisplayName=No
+View.Columns=Yes
+View.Columns._Columns=DisplayName
+View.Columns._Limit=-5
+View.TemporaryVTables=Yes
+View.Indexes=No
+View.Comment=No
+View.IconPicture=No
+View_SymbolLayout=&lt;Form&gt;[CRLF] &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;Yes&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Owner and Name&quot; Attribute=&quot;OwnerDisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/ExclusiveChoice&gt;[CRLF] &lt;Separator Name=&quot;Separator&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Columns&quot; Collection=&quot;Columns&quot; Columns=&quot;DisplayName No\r\nExpression No\r\nDataType No\r\nSymbolDataType No &amp;quot;Domain or Data type&amp;quot;\r\nIndexIndicator No&quot; HasLimit=&quot;Yes&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Tables&quot; Collection=&quot;TemporaryVTables&quot; Columns=&quot;Name Yes&quot; HasLimit=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardCollection Name=&quot;Indexes&quot; Collection=&quot;Indexes&quot; Columns=&quot;DisplayName Yes&quot; HasLimit=&quot;No&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Comment&quot; Attribute=&quot;Comment&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;LEFT&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Icon&quot; Attribute=&quot;IconPicture&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF]&lt;/Form&gt;
+Procedure.Stereotype=No
+Procedure.DisplayName=Yes
+Procedure.OwnerDisplayName=No
+Procedure.Comment=No
+Procedure.IconPicture=No
+Procedure_SymbolLayout=&lt;Form&gt;[CRLF] &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;Yes&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Owner and Name&quot; Attribute=&quot;OwnerDisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/ExclusiveChoice&gt;[CRLF] &lt;Separator Name=&quot;Separator&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Comment&quot; Attribute=&quot;Comment&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;LEFT&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;StandardAttribute Name=&quot;Icon&quot; Attribute=&quot;IconPicture&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Alignment=&quot;CNTR&quot; Caption=&quot;&quot; Mandatory=&quot;Yes&quot; /&gt;[CRLF]&lt;/Form&gt;
+Reference.Cardinality=No
+Reference.ImplementationType=No
+Reference.ChildRole=Yes
+Reference.Stereotype=Yes
+Reference.DisplayName=No
+Reference.ForeignKeyConstraintName=Yes
+Reference.JoinExpression=No
+Reference.Integrity=No
+Reference.ParentRole=Yes
+Reference_SymbolLayout=&lt;Form&gt;[CRLF] &lt;Form Name=&quot;Source&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Cardinality&quot; Attribute=&quot;Cardinality&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Implementation&quot; Attribute=&quot;ImplementationType&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Child Role&quot; Attribute=&quot;ChildRole&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Center&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;No&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]   &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]   &lt;StandardAttribute Name=&quot;Cons&amp;amp;traint Name&quot; Attribute=&quot;ForeignKeyConstraintName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;Cons&amp;amp;traint Name&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]   &lt;StandardAttribute Name=&quot;Join&quot; Attribute=&quot;JoinExpression&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;Join&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;/ExclusiveChoice&gt;[CRLF]  &lt;StandardAttribute Name=&quot;Referential integrity&quot; Attribute=&quot;Integrity&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;Referential integrity&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Destination&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Parent Role&quot; Attribute=&quot;ParentRole&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF]&lt;/Form&gt;
+ViewReference.ChildRole=Yes
+ViewReference.Stereotype=Yes
+ViewReference.DisplayName=No
+ViewReference.JoinExpression=No
+ViewReference.ParentRole=Yes
+ViewReference_SymbolLayout=&lt;Form&gt;[CRLF] &lt;Form Name=&quot;Source&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Child Role&quot; Attribute=&quot;ChildRole&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Center&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Stereotype&quot; Attribute=&quot;Stereotype&quot; Prefix=&quot;&amp;lt;&amp;lt;&quot; Suffix=&quot;&amp;gt;&amp;gt;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;ExclusiveChoice Name=&quot;Exclusive Choice&quot; Mandatory=&quot;No&quot; Display=&quot;HorizontalRadios&quot; &gt;[CRLF]   &lt;StandardAttribute Name=&quot;Name&quot; Attribute=&quot;DisplayName&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]   &lt;StandardAttribute Name=&quot;Join Expression&quot; Attribute=&quot;JoinExpression&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF]  &lt;/ExclusiveChoice&gt;[CRLF] &lt;/Form&gt;[CRLF] &lt;Form Name=&quot;Destination&quot; &gt;[CRLF]  &lt;StandardAttribute Name=&quot;Parent Role&quot; Attribute=&quot;ParentRole&quot; Prefix=&quot;&quot; Suffix=&quot;&quot; Caption=&quot;&quot; Mandatory=&quot;No&quot; /&gt;[CRLF] &lt;/Form&gt;[CRLF]&lt;/Form&gt;
+File Location=No
+PckgStrn=Yes
+ColnMode=0
+ColnMax=5
+TablOwnr=No
+ColnDttp=Yes
+ColnDomn=No
+ColnShowDomn=No
+ColnKey=Yes
+ColnIndx=No
+ColnMand=No
+ColnStrn=Yes
+VColName=Yes
+VColExpr=No
+VColDttp=No
+VColIndx=No
+VColCMod=0
+VColCMax=5
+ProcOwnr=No
+KeyStrn=Yes
+IndxStrn=Yes
+TrgrStrn=Yes
+
+[DisplayPreferences\Symbol]
+
+[DisplayPreferences\Symbol\FRMEOBJ]
+STRNFont=新宋体,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=新宋体,8,N
+DISPNAMEFont color=0, 0, 0
+LABLFont=新宋体,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=6000
+Height=2000
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=64
+Brush gradient color=192 192 192
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 255 128 128
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\FRMELNK]
+CENTERFont=新宋体,8,N
+CENTERFont color=0, 0, 0
+Line style=0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 128 255
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\FILO]
+OBJSTRNFont=新宋体,8,N
+OBJSTRNFont color=0, 0, 0
+DISPNAMEFont=新宋体,8,N
+DISPNAMEFont color=0, 0, 0
+LCNMFont=新宋体,8,N
+LCNMFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=Yes
+Keep center=Yes
+Keep size=No
+Width=2400
+Height=2400
+Brush color=255 255 255
+Fill Color=No
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 0 0 255
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\PDMPCKG]
+STRNFont=新宋体,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=新宋体,8,N
+DISPNAMEFont color=0, 0, 0
+LABLFont=新宋体,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=3600
+Brush color=255 255 192
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 178 178 178
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\TABL]
+STRNFont=新宋体,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=新宋体,8,N
+DISPNAMEFont color=0, 0, 0
+OWNRDISPNAMEFont=新宋体,8,N
+OWNRDISPNAMEFont color=0, 0, 0
+ColumnsFont=新宋体,8,N
+ColumnsFont color=0, 0, 0
+TablePkColumnsFont=新宋体,8,U
+TablePkColumnsFont color=0, 0, 0
+TableFkColumnsFont=新宋体,8,N
+TableFkColumnsFont color=0, 0, 0
+KeysFont=新宋体,8,N
+KeysFont color=0, 0, 0
+IndexesFont=新宋体,8,N
+IndexesFont color=0, 0, 0
+TriggersFont=新宋体,8,N
+TriggersFont color=0, 0, 0
+LABLFont=新宋体,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=4000
+Brush color=178 214 252
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 0 128 192
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\VIEW]
+STRNFont=新宋体,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=新宋体,8,N
+DISPNAMEFont color=0, 0, 0
+OWNRDISPNAMEFont=新宋体,8,N
+OWNRDISPNAMEFont color=0, 0, 0
+ColumnsFont=新宋体,8,N
+ColumnsFont color=0, 0, 0
+TablePkColumnsFont=新宋体,8,U
+TablePkColumnsFont color=0, 0, 0
+TableFkColumnsFont=新宋体,8,N
+TableFkColumnsFont color=0, 0, 0
+TemporaryVTablesFont=新宋体,8,N
+TemporaryVTablesFont color=0, 0, 0
+IndexesFont=新宋体,8,N
+IndexesFont color=0, 0, 0
+LABLFont=新宋体,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4800
+Height=4000
+Brush color=208 208 255
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 128 192
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\PROC]
+STRNFont=新宋体,8,N
+STRNFont color=0, 0, 0
+DISPNAMEFont=新宋体,8,N
+DISPNAMEFont color=0, 0, 0
+OWNRDISPNAMEFont=新宋体,8,N
+OWNRDISPNAMEFont color=0, 0, 0
+LABLFont=新宋体,8,N
+LABLFont color=0, 0, 0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Width=4000
+Height=1000
+Brush color=255 255 192
+Fill Color=Yes
+Brush style=6
+Brush bitmap mode=12
+Brush gradient mode=65
+Brush gradient color=255 255 255
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 108 0
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\REFR]
+SOURCEFont=新宋体,8,N
+SOURCEFont color=0, 0, 0
+CENTERFont=新宋体,8,N
+CENTERFont color=0, 0, 0
+DESTINATIONFont=新宋体,8,N
+DESTINATIONFont color=0, 0, 0
+Line style=0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 0 128 192
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\VREF]
+SOURCEFont=新宋体,8,N
+SOURCEFont color=0, 0, 0
+CENTERFont=新宋体,8,N
+CENTERFont color=0, 0, 0
+DESTINATIONFont=新宋体,8,N
+DESTINATIONFont color=0, 0, 0
+Line style=0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 128 128 192
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\USRDEPD]
+OBJXSTRFont=新宋体,8,N
+OBJXSTRFont color=0, 0, 0
+Line style=0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=2 0 128 128 255
+Shadow color=192 192 192
+Shadow=0
+
+[DisplayPreferences\Symbol\Free Symbol]
+Free TextFont=新宋体,8,N
+Free TextFont color=0, 0, 0
+Line style=0
+AutoAdjustToText=Yes
+Keep aspect=No
+Keep center=No
+Keep size=No
+Brush color=255 255 255
+Fill Color=Yes
+Brush style=1
+Brush bitmap mode=12
+Brush gradient mode=0
+Brush gradient color=118 118 118
+Brush background image=
+Custom shape=
+Custom text mode=0
+Pen=1 0 0 0 255
+Shadow color=192 192 192
+Shadow=0</a:DisplayPreferences>
+<a:PaperSize>(8268, 11693)</a:PaperSize>
+<a:PageMargins>((315,354), (433,354))</a:PageMargins>
+<a:PageOrientation>1</a:PageOrientation>
+<a:PaperSource>15</a:PaperSource>
+<c:Symbols>
+<o:TableSymbol Id="o5">
+<a:CreationDate>1524449375</a:CreationDate>
+<a:ModificationDate>1538296407</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-38123,15297), (-26435,28269))</a:Rect>
+<a:LineColor>12615680</a:LineColor>
+<a:FillColor>16570034</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o6"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o7">
+<a:CreationDate>1524449375</a:CreationDate>
+<a:ModificationDate>1524449886</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-23935,12010), (-11861,28282))</a:Rect>
+<a:LineColor>12615680</a:LineColor>
+<a:FillColor>16570034</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o8"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o9">
+<a:CreationDate>1524449375</a:CreationDate>
+<a:ModificationDate>1538296409</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-9361,18172), (2713,27845))</a:Rect>
+<a:LineColor>12615680</a:LineColor>
+<a:FillColor>16570034</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o10"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o11">
+<a:CreationDate>1524449375</a:CreationDate>
+<a:ModificationDate>1524449886</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((5214,16547), (17288,27869))</a:Rect>
+<a:LineColor>12615680</a:LineColor>
+<a:FillColor>16570034</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o12"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o13">
+<a:CreationDate>1524449375</a:CreationDate>
+<a:ModificationDate>1538296412</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((19788,14872), (31862,27845))</a:Rect>
+<a:LineColor>12615680</a:LineColor>
+<a:FillColor>16570034</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o14"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o15">
+<a:CreationDate>1524449375</a:CreationDate>
+<a:ModificationDate>1538296204</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-37598,8498), (-29000,12497))</a:Rect>
+<a:LineColor>12615680</a:LineColor>
+<a:FillColor>16570034</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o16"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o17">
+<a:CreationDate>1524449375</a:CreationDate>
+<a:ModificationDate>1538296205</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-37674,3548), (-29076,7547))</a:Rect>
+<a:LineColor>12615680</a:LineColor>
+<a:FillColor>16570034</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o18"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o19">
+<a:CreationDate>1524449375</a:CreationDate>
+<a:ModificationDate>1538296308</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-37528,-6452), (-28929,-2453))</a:Rect>
+<a:LineColor>12615680</a:LineColor>
+<a:FillColor>16570034</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o20"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o21">
+<a:CreationDate>1524449375</a:CreationDate>
+<a:ModificationDate>1538296401</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-24280,-1775), (-11048,10373))</a:Rect>
+<a:LineColor>12615680</a:LineColor>
+<a:FillColor>16570034</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o22"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o23">
+<a:CreationDate>1524449375</a:CreationDate>
+<a:ModificationDate>1538296599</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-9182,625), (2892,10298))</a:Rect>
+<a:LineColor>12615680</a:LineColor>
+<a:FillColor>16570034</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o24"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o25">
+<a:CreationDate>1524449375</a:CreationDate>
+<a:ModificationDate>1538296612</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((5017,-2538), (17091,10434))</a:Rect>
+<a:LineColor>12615680</a:LineColor>
+<a:FillColor>16570034</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o26"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o27">
+<a:CreationDate>1524449375</a:CreationDate>
+<a:ModificationDate>1538297772</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-39520,-17440), (-26288,-8592))</a:Rect>
+<a:LineColor>12615680</a:LineColor>
+<a:FillColor>16570034</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o28"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o29">
+<a:CreationDate>1524449375</a:CreationDate>
+<a:ModificationDate>1538297770</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-24744,-19106), (-10738,-8608))</a:Rect>
+<a:LineColor>12615680</a:LineColor>
+<a:FillColor>16570034</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o30"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o31">
+<a:CreationDate>1524449375</a:CreationDate>
+<a:ModificationDate>1538297380</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-9749,-20696), (3870,-8548))</a:Rect>
+<a:LineColor>12615680</a:LineColor>
+<a:FillColor>16570034</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o32"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o33">
+<a:CreationDate>1524449375</a:CreationDate>
+<a:ModificationDate>1538297383</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((5261,-17623), (18494,-8774))</a:Rect>
+<a:LineColor>12615680</a:LineColor>
+<a:FillColor>16570034</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o34"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o35">
+<a:CreationDate>1538296083</a:CreationDate>
+<a:ModificationDate>1538296211</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((-37675,-1349), (-29076,2650))</a:Rect>
+<a:LineColor>12615680</a:LineColor>
+<a:FillColor>16570034</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o36"/>
+</c:Object>
+</o:TableSymbol>
+<o:TableSymbol Id="o37">
+<a:CreationDate>1538296587</a:CreationDate>
+<a:ModificationDate>1538296608</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((19570,-987), (32030,8687))</a:Rect>
+<a:LineColor>12615680</a:LineColor>
+<a:FillColor>16570034</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o38"/>
+</c:Object>
+</o:TableSymbol>
+<o:TextSymbol Id="o39">
+<a:Text>config_id</a:Text>
+<a:CreationDate>1538296632</a:CreationDate>
+<a:ModificationDate>1538297253</a:ModificationDate>
+<a:Rect>((-13950,-17175), (73200,19575))</a:Rect>
+<a:TextStyle>4130</a:TextStyle>
+<a:BaseSymbol.Flags>1</a:BaseSymbol.Flags>
+<a:LineColor>0</a:LineColor>
+<a:DashStyle>7</a:DashStyle>
+<a:FillColor>16777215</a:FillColor>
+<a:ShadowColor>16777215</a:ShadowColor>
+<a:FontName>新宋体,8,N</a:FontName>
+</o:TextSymbol>
+<o:TableSymbol Id="o40">
+<a:CreationDate>1538297386</a:CreationDate>
+<a:ModificationDate>1538297498</a:ModificationDate>
+<a:IconMode>-1</a:IconMode>
+<a:Rect>((19859,-18262), (33092,-8589))</a:Rect>
+<a:LineColor>12615680</a:LineColor>
+<a:FillColor>16570034</a:FillColor>
+<a:ShadowColor>12632256</a:ShadowColor>
+<a:FontList>STRN 0 新宋体,8,N
+DISPNAME 0 新宋体,8,N
+OWNRDISPNAME 0 新宋体,8,N
+Columns 0 新宋体,8,N
+TablePkColumns 0 新宋体,8,U
+TableFkColumns 0 新宋体,8,N
+Keys 0 新宋体,8,N
+Indexes 0 新宋体,8,N
+Triggers 0 新宋体,8,N
+LABL 0 新宋体,8,N</a:FontList>
+<a:BrushStyle>6</a:BrushStyle>
+<a:GradientFillMode>65</a:GradientFillMode>
+<a:GradientEndColor>16777215</a:GradientEndColor>
+<c:Object>
+<o:Table Ref="o41"/>
+</c:Object>
+</o:TableSymbol>
+</c:Symbols>
+</o:PhysicalDiagram>
+</c:PhysicalDiagrams>
+<c:DefaultDiagram>
+<o:PhysicalDiagram Ref="o4"/>
+</c:DefaultDiagram>
+<c:Tables>
+<o:Table Id="o6">
+<a:ObjectID>BB11FFF9-9DBB-4648-87AA-9A50E1214549</a:ObjectID>
+<a:Name>sys_dept</a:Name>
+<a:Code>sys_dept</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297518</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>部门表</a:Comment>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o42">
+<a:ObjectID>00C66282-419A-4915-8509-DFFFE6352DE8</a:ObjectID>
+<a:Name>dept_id</a:Name>
+<a:Code>dept_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>部门id</a:Comment>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+<a:Identity>1</a:Identity>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o43">
+<a:ObjectID>5B6FB0B1-5B1E-4E86-AF2A-72C49EBB315E</a:ObjectID>
+<a:Name>parent_id</a:Name>
+<a:Code>parent_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>父部门id</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+</o:Column>
+<o:Column Id="o44">
+<a:ObjectID>065E33A5-6AB5-44F1-8FEC-A72311EECD66</a:ObjectID>
+<a:Name>ancestors</a:Name>
+<a:Code>ancestors</a:Code>
+<a:CreationDate>1538295690</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538295792</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:DataType>varchar(50)</a:DataType>
+<a:Length>50</a:Length>
+</o:Column>
+<o:Column Id="o45">
+<a:ObjectID>EBB59EC8-AFD4-40E3-B811-DD5040728D91</a:ObjectID>
+<a:Name>dept_name</a:Name>
+<a:Code>dept_name</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>部门名称</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(30)</a:DataType>
+<a:Length>30</a:Length>
+</o:Column>
+<o:Column Id="o46">
+<a:ObjectID>2F26C025-82B0-4AC5-AEE0-32BA07B7B529</a:ObjectID>
+<a:Name>order_num</a:Name>
+<a:Code>order_num</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>显示顺序</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>int(4)</a:DataType>
+<a:Length>4</a:Length>
+</o:Column>
+<o:Column Id="o47">
+<a:ObjectID>CA504E09-528C-482E-A0C7-F86C559AA3A6</a:ObjectID>
+<a:Name>leader</a:Name>
+<a:Code>leader</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>负责人</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(20)</a:DataType>
+<a:Length>20</a:Length>
+</o:Column>
+<o:Column Id="o48">
+<a:ObjectID>9CFC55C4-DF2B-4A90-A789-C3839FAA43A8</a:ObjectID>
+<a:Name>phone</a:Name>
+<a:Code>phone</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>联系电话</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(20)</a:DataType>
+<a:Length>20</a:Length>
+</o:Column>
+<o:Column Id="o49">
+<a:ObjectID>1A9407E5-D74E-4CE9-9078-C4EC25393F7B</a:ObjectID>
+<a:Name>email</a:Name>
+<a:Code>email</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>邮箱</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(20)</a:DataType>
+<a:Length>20</a:Length>
+</o:Column>
+<o:Column Id="o50">
+<a:ObjectID>B6772812-4B69-4248-871D-FA1B4BA0E5F7</a:ObjectID>
+<a:Name>status</a:Name>
+<a:Code>status</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538295792</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>部门状态:0正常,1停用</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>char(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o51">
+<a:ObjectID>6EBD2BFF-861E-4247-BAAB-B37CCBAF6F8D</a:ObjectID>
+<a:Name>del_flag</a:Name>
+<a:Code>del_flag</a:Code>
+<a:CreationDate>1538295690</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538295792</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:DataType>char(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o52">
+<a:ObjectID>2504A090-F6D6-493F-855E-5154E01AF0CA</a:ObjectID>
+<a:Name>create_by</a:Name>
+<a:Code>create_by</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>创建者</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o53">
+<a:ObjectID>D866AE9E-E7FF-47B2-BF3D-9BC1605A2F39</a:ObjectID>
+<a:Name>create_time</a:Name>
+<a:Code>create_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>创建时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o54">
+<a:ObjectID>7C6C9836-FC23-4492-8CF1-A4439E01B57C</a:ObjectID>
+<a:Name>update_by</a:Name>
+<a:Code>update_by</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>更新者</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o55">
+<a:ObjectID>FCED770D-005C-4531-A9D7-D1FD0A054719</a:ObjectID>
+<a:Name>update_time</a:Name>
+<a:Code>update_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>更新时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o56">
+<a:ObjectID>15C1774B-9F17-48B6-A61F-728A25220B30</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<c:Key.Columns>
+<o:Column Ref="o42"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o56"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o8">
+<a:ObjectID>AA56FD91-4450-4282-8F31-AE302DF6AFEC</a:ObjectID>
+<a:Name>sys_user</a:Name>
+<a:Code>sys_user</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297540</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>用户信息表</a:Comment>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o57">
+<a:ObjectID>4A920BCE-4040-4F12-89D2-7DF345B90321</a:ObjectID>
+<a:Name>user_id</a:Name>
+<a:Code>user_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>用户ID</a:Comment>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+<a:Identity>1</a:Identity>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o58">
+<a:ObjectID>174E10B2-4A4D-40FF-80B8-B4D285561E42</a:ObjectID>
+<a:Name>dept_id</a:Name>
+<a:Code>dept_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297552</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>部门ID</a:Comment>
+<a:DefaultValue>NULL</a:DefaultValue>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+</o:Column>
+<o:Column Id="o59">
+<a:ObjectID>1D4908A9-5416-4252-BA09-FA122D0194C3</a:ObjectID>
+<a:Name>login_name</a:Name>
+<a:Code>login_name</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>登录账号</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(30)</a:DataType>
+<a:Length>30</a:Length>
+</o:Column>
+<o:Column Id="o60">
+<a:ObjectID>2EF63346-9E82-4746-81B7-AB67D727446D</a:ObjectID>
+<a:Name>user_name</a:Name>
+<a:Code>user_name</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>用户昵称</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(30)</a:DataType>
+<a:Length>30</a:Length>
+</o:Column>
+<o:Column Id="o61">
+<a:ObjectID>477EA57C-0E0B-4596-9A85-EC91E72F5160</a:ObjectID>
+<a:Name>user_type</a:Name>
+<a:Code>user_type</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>类型:Y默认用户,N非默认用户</a:Comment>
+<a:DefaultValue>N</a:DefaultValue>
+<a:DataType>char(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o62">
+<a:ObjectID>CD16FFF4-F214-473B-A9A8-FA30A3E357D1</a:ObjectID>
+<a:Name>email</a:Name>
+<a:Code>email</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>用户邮箱</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+</o:Column>
+<o:Column Id="o63">
+<a:ObjectID>61603FA5-3EBC-4389-AED7-1B54D238A563</a:ObjectID>
+<a:Name>phonenumber</a:Name>
+<a:Code>phonenumber</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>手机号码</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(20)</a:DataType>
+<a:Length>20</a:Length>
+</o:Column>
+<o:Column Id="o64">
+<a:ObjectID>65E9DE55-ED58-4BD9-B96C-7C081D1119B2</a:ObjectID>
+<a:Name>sex</a:Name>
+<a:Code>sex</a:Code>
+<a:CreationDate>1538295815</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538295948</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:DataType>char(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o65">
+<a:ObjectID>E5E35061-221A-4BB9-AA22-3CF20F1FCCF6</a:ObjectID>
+<a:Name>avatar</a:Name>
+<a:Code>avatar</a:Code>
+<a:CreationDate>1538295815</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538295948</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+</o:Column>
+<o:Column Id="o66">
+<a:ObjectID>4ED1C2BF-B826-4A82-9464-EEBF271F4054</a:ObjectID>
+<a:Name>password</a:Name>
+<a:Code>password</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>密码</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+</o:Column>
+<o:Column Id="o67">
+<a:ObjectID>53E6BB49-3435-46E0-832F-BCAFE1A021CB</a:ObjectID>
+<a:Name>salt</a:Name>
+<a:Code>salt</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>盐加密</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+</o:Column>
+<o:Column Id="o68">
+<a:ObjectID>245CAD53-B33B-4EED-8CFA-7AA10ED943B8</a:ObjectID>
+<a:Name>status</a:Name>
+<a:Code>status</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297540</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>帐号状态:0正常,1禁用</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>char(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o69">
+<a:ObjectID>7F851464-6CC5-445B-9413-2A89B9CE90CB</a:ObjectID>
+<a:Name>del_flag</a:Name>
+<a:Code>del_flag</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538295948</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>拒绝登录描述</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>char(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o70">
+<a:ObjectID>3DC8EC79-D75A-4BF8-8FBC-152E938AC14F</a:ObjectID>
+<a:Name>create_by</a:Name>
+<a:Code>create_by</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>创建者</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o71">
+<a:ObjectID>48C8C936-7A34-4A97-AACA-A6F07751FFAD</a:ObjectID>
+<a:Name>create_time</a:Name>
+<a:Code>create_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>创建时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o72">
+<a:ObjectID>6050B4F3-9B26-4B40-AB4C-BA483F179958</a:ObjectID>
+<a:Name>update_by</a:Name>
+<a:Code>update_by</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>更新者</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o73">
+<a:ObjectID>CD1E7E11-8EB6-4C9C-A69C-39CBCF10573E</a:ObjectID>
+<a:Name>update_time</a:Name>
+<a:Code>update_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>更新时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o74">
+<a:ObjectID>F9F55D4C-13E6-49A0-BFDB-E0AFE0FA5501</a:ObjectID>
+<a:Name>remark</a:Name>
+<a:Code>remark</a:Code>
+<a:CreationDate>1538295815</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538295948</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:DataType>varchar(500)</a:DataType>
+<a:Length>500</a:Length>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o75">
+<a:ObjectID>2E35FD67-A7A7-4B10-85E4-85115AD0E143</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<c:Key.Columns>
+<o:Column Ref="o57"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o75"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o10">
+<a:ObjectID>2711A520-532C-4F14-A034-BFF047C9CD6B</a:ObjectID>
+<a:Name>sys_post</a:Name>
+<a:Code>sys_post</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297571</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>岗位信息表</a:Comment>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o76">
+<a:ObjectID>FB04D29E-41F0-49A3-BFDB-58E222843F21</a:ObjectID>
+<a:Name>post_id</a:Name>
+<a:Code>post_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>岗位ID</a:Comment>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+<a:Identity>1</a:Identity>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o77">
+<a:ObjectID>50010C4E-4F59-47B9-8F08-05E8E071E8B1</a:ObjectID>
+<a:Name>post_code</a:Name>
+<a:Code>post_code</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>岗位编码</a:Comment>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o78">
+<a:ObjectID>0F929250-051E-4344-B22A-C30E071A543B</a:ObjectID>
+<a:Name>post_name</a:Name>
+<a:Code>post_name</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>岗位名称</a:Comment>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o79">
+<a:ObjectID>2BC9005E-350F-46BE-98D6-9B13060F1B20</a:ObjectID>
+<a:Name>post_sort</a:Name>
+<a:Code>post_sort</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>显示顺序</a:Comment>
+<a:DataType>int(4)</a:DataType>
+<a:Length>4</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o80">
+<a:ObjectID>F6D7AD3E-5EA0-4759-B6BF-6334B7105B78</a:ObjectID>
+<a:Name>status</a:Name>
+<a:Code>status</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297565</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>状态(0正常 1停用)</a:Comment>
+<a:DataType>char(1)</a:DataType>
+<a:Length>1</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o81">
+<a:ObjectID>CED01369-5063-479D-A444-32936369A486</a:ObjectID>
+<a:Name>create_by</a:Name>
+<a:Code>create_by</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>创建者</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o82">
+<a:ObjectID>A29528FF-A2B9-4149-B997-1B0204D42E40</a:ObjectID>
+<a:Name>create_time</a:Name>
+<a:Code>create_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>创建时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o83">
+<a:ObjectID>6026A05D-0C1E-497E-8EAF-FDB704BE6A52</a:ObjectID>
+<a:Name>update_by</a:Name>
+<a:Code>update_by</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>更新者</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o84">
+<a:ObjectID>DF516F5F-CD82-4347-AC57-BDCB4E5DD75E</a:ObjectID>
+<a:Name>update_time</a:Name>
+<a:Code>update_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>更新时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o85">
+<a:ObjectID>539CEC34-49F0-49A0-9B7C-B84655FD2233</a:ObjectID>
+<a:Name>remark</a:Name>
+<a:Code>remark</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>备注</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(500)</a:DataType>
+<a:Length>500</a:Length>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o86">
+<a:ObjectID>14E893B1-D0BA-46A7-A905-F0FFA089B65A</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<c:Key.Columns>
+<o:Column Ref="o76"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o86"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o12">
+<a:ObjectID>11337551-BA45-43CD-9148-92BE60E2F8F5</a:ObjectID>
+<a:Name>sys_role</a:Name>
+<a:Code>sys_role</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297608</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>角色信息表</a:Comment>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o87">
+<a:ObjectID>A420E2C9-8FE3-452A-9047-C7BEACE8490C</a:ObjectID>
+<a:Name>role_id</a:Name>
+<a:Code>role_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>角色ID</a:Comment>
+<a:DataType>int(10)</a:DataType>
+<a:Length>10</a:Length>
+<a:Identity>1</a:Identity>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o88">
+<a:ObjectID>9342763D-5B89-4440-965B-2B55DB4ACD86</a:ObjectID>
+<a:Name>role_name</a:Name>
+<a:Code>role_name</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>角色名称</a:Comment>
+<a:DataType>varchar(30)</a:DataType>
+<a:Length>30</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o89">
+<a:ObjectID>54480009-0C7E-40F2-AA76-CD914A6D66C5</a:ObjectID>
+<a:Name>role_key</a:Name>
+<a:Code>role_key</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>角色权限字符串</a:Comment>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o90">
+<a:ObjectID>E73F4D0E-12A0-42B5-B3CE-B573D499DD6C</a:ObjectID>
+<a:Name>role_sort</a:Name>
+<a:Code>role_sort</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538296031</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>显示顺序</a:Comment>
+<a:DataType>int(10)</a:DataType>
+<a:Length>10</a:Length>
+</o:Column>
+<o:Column Id="o91">
+<a:ObjectID>5F836F54-9EBD-4768-AA3C-F268F5FAFE8D</a:ObjectID>
+<a:Name>data_scope</a:Name>
+<a:Code>data_scope</a:Code>
+<a:CreationDate>1538295973</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296031</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:DataType>char(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o92">
+<a:ObjectID>424ED799-E4C1-44AD-A172-C2B3C405E9C5</a:ObjectID>
+<a:Name>status</a:Name>
+<a:Code>status</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297608</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>角色状态:0正常,1禁用</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>char(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o93">
+<a:ObjectID>8E034C76-5966-4246-B81B-7B12F37D96A7</a:ObjectID>
+<a:Name>del_flag</a:Name>
+<a:Code>del_flag</a:Code>
+<a:CreationDate>1538295973</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296031</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:DataType>char(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o94">
+<a:ObjectID>214F6E1F-28B1-454B-ABF0-D1C43220129D</a:ObjectID>
+<a:Name>create_by</a:Name>
+<a:Code>create_by</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>创建者</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o95">
+<a:ObjectID>1A6D5791-0353-4ABC-8BC2-921BB87A2E5A</a:ObjectID>
+<a:Name>create_time</a:Name>
+<a:Code>create_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>创建时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o96">
+<a:ObjectID>D6394880-A49C-4B83-B43A-5FDBAA918AA3</a:ObjectID>
+<a:Name>update_by</a:Name>
+<a:Code>update_by</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>更新者</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o97">
+<a:ObjectID>34285DF5-8E36-452B-A3AA-9F4290C20F7E</a:ObjectID>
+<a:Name>update_time</a:Name>
+<a:Code>update_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>更新时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o98">
+<a:ObjectID>2FAB98F7-68A2-460B-8A20-5D5DA73F5103</a:ObjectID>
+<a:Name>remark</a:Name>
+<a:Code>remark</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>备注</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(500)</a:DataType>
+<a:Length>500</a:Length>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o99">
+<a:ObjectID>4342E67F-D33C-435F-9865-973E053B6075</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<c:Key.Columns>
+<o:Column Ref="o87"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o99"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o14">
+<a:ObjectID>FBC2A590-443B-43C9-82D5-687B850C8B3D</a:ObjectID>
+<a:Name>sys_menu</a:Name>
+<a:Code>sys_menu</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297627</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>菜单权限表</a:Comment>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o100">
+<a:ObjectID>BB061292-3B99-432E-9B96-5362AAD918B9</a:ObjectID>
+<a:Name>menu_id</a:Name>
+<a:Code>menu_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>菜单ID</a:Comment>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+<a:Identity>1</a:Identity>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o101">
+<a:ObjectID>EA8422AB-37B1-4D60-A3C9-A4BF9039A9D4</a:ObjectID>
+<a:Name>menu_name</a:Name>
+<a:Code>menu_name</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>菜单名称</a:Comment>
+<a:DataType>varchar(50)</a:DataType>
+<a:Length>50</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o102">
+<a:ObjectID>E56E04A8-63F6-4271-92E3-974DC84DD536</a:ObjectID>
+<a:Name>parent_id</a:Name>
+<a:Code>parent_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>父菜单ID</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+</o:Column>
+<o:Column Id="o103">
+<a:ObjectID>1809914E-6B09-4CD2-8916-E603D6717557</a:ObjectID>
+<a:Name>order_num</a:Name>
+<a:Code>order_num</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>显示顺序</a:Comment>
+<a:DefaultValue>NULL</a:DefaultValue>
+<a:DataType>int(4)</a:DataType>
+<a:Length>4</a:Length>
+</o:Column>
+<o:Column Id="o104">
+<a:ObjectID>FCB44D46-3C21-40CB-B942-57823E52E5B1</a:ObjectID>
+<a:Name>url</a:Name>
+<a:Code>url</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>请求地址</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(200)</a:DataType>
+<a:Length>200</a:Length>
+</o:Column>
+<o:Column Id="o105">
+<a:ObjectID>667EE044-6805-4668-BAF4-E78B3052051F</a:ObjectID>
+<a:Name>menu_type</a:Name>
+<a:Code>menu_type</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>类型:M目录,C菜单,F按钮</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>char(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o106">
+<a:ObjectID>F7658083-BCAB-46F7-AF31-8A4B1D8749EF</a:ObjectID>
+<a:Name>visible</a:Name>
+<a:Code>visible</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297627</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>菜单状态:0显示,1隐藏</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>char(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o107">
+<a:ObjectID>528611C8-C319-430F-8F00-68FBA60F310B</a:ObjectID>
+<a:Name>perms</a:Name>
+<a:Code>perms</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>权限标识</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+</o:Column>
+<o:Column Id="o108">
+<a:ObjectID>38004CD7-8DD0-43F1-9E59-B50132CB6F1A</a:ObjectID>
+<a:Name>icon</a:Name>
+<a:Code>icon</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>菜单图标</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+</o:Column>
+<o:Column Id="o109">
+<a:ObjectID>6927665F-EC42-4E1F-A275-4B27F442B6B8</a:ObjectID>
+<a:Name>create_by</a:Name>
+<a:Code>create_by</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>创建者</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o110">
+<a:ObjectID>1A6A4D0F-0B0B-4522-B4DA-3F1D592CB889</a:ObjectID>
+<a:Name>create_time</a:Name>
+<a:Code>create_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>创建时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o111">
+<a:ObjectID>605D7776-4820-4BA9-91E8-AD837B73AEFB</a:ObjectID>
+<a:Name>update_by</a:Name>
+<a:Code>update_by</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>更新者</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o112">
+<a:ObjectID>4CFF26BB-8736-4864-855E-C7C1B133370B</a:ObjectID>
+<a:Name>update_time</a:Name>
+<a:Code>update_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>更新时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o113">
+<a:ObjectID>67C6E46C-DF06-480A-BC74-E927406E5D26</a:ObjectID>
+<a:Name>remark</a:Name>
+<a:Code>remark</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>备注</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(500)</a:DataType>
+<a:Length>500</a:Length>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o114">
+<a:ObjectID>08EBE713-9E4D-4312-AA7D-2E4E439734E5</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<c:Key.Columns>
+<o:Column Ref="o100"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o114"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o16">
+<a:ObjectID>F8CB66D1-3632-4509-97C4-17016BE261FC</a:ObjectID>
+<a:Name>sys_user_role</a:Name>
+<a:Code>sys_user_role</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297676</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>用户和角色关联表</a:Comment>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o115">
+<a:ObjectID>73701F72-C45B-4CA0-8A62-632890E3DEF0</a:ObjectID>
+<a:Name>user_id</a:Name>
+<a:Code>user_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>用户ID</a:Comment>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o116">
+<a:ObjectID>CABD458B-DA59-46A8-99C3-088AD8D34097</a:ObjectID>
+<a:Name>role_id</a:Name>
+<a:Code>role_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>角色ID</a:Comment>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o117">
+<a:ObjectID>37C3213B-EF22-4CD4-A91F-9A9A2503FB2A</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<c:Key.Columns>
+<o:Column Ref="o115"/>
+<o:Column Ref="o116"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o117"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o18">
+<a:ObjectID>9F8C6A9F-3221-410E-AEA4-D1A80026397E</a:ObjectID>
+<a:Name>sys_role_menu</a:Name>
+<a:Code>sys_role_menu</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297683</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>角色和菜单关联表</a:Comment>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o118">
+<a:ObjectID>D2E151A5-6156-46EF-844E-0ADC3070293B</a:ObjectID>
+<a:Name>role_id</a:Name>
+<a:Code>role_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>角色ID</a:Comment>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o119">
+<a:ObjectID>6B8C1E62-FD8B-4504-8FA0-F69917722FBD</a:ObjectID>
+<a:Name>menu_id</a:Name>
+<a:Code>menu_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>菜单ID</a:Comment>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o120">
+<a:ObjectID>2E72304F-91F0-4392-BAE8-BBF7A4346B7D</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<c:Key.Columns>
+<o:Column Ref="o118"/>
+<o:Column Ref="o119"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o120"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o20">
+<a:ObjectID>726CB18E-7D5B-4E2E-9CF8-047AD5AF89E3</a:ObjectID>
+<a:Name>sys_user_post</a:Name>
+<a:Code>sys_user_post</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297694</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>用户与岗位关联表</a:Comment>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o121">
+<a:ObjectID>E4A1CAB6-0F63-4917-ACEF-418DE7F894BA</a:ObjectID>
+<a:Name>user_id</a:Name>
+<a:Code>user_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538296306</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>用户ID</a:Comment>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o122">
+<a:ObjectID>8E7188D5-B3A5-4F1D-B6CB-D77D652414DE</a:ObjectID>
+<a:Name>post_id</a:Name>
+<a:Code>post_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538296306</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>岗位ID</a:Comment>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o123">
+<a:ObjectID>4091B7D3-2404-4C20-BBCD-B63E22A5E960</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<c:Key.Columns>
+<o:Column Ref="o121"/>
+<o:Column Ref="o122"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o123"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o22">
+<a:ObjectID>FE347A45-D8EC-423B-9B38-4D315A3ABE42</a:ObjectID>
+<a:Name>sys_oper_log</a:Name>
+<a:Code>sys_oper_log</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297699</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>操作日志记录</a:Comment>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o124">
+<a:ObjectID>F5FC8AC1-7415-4A57-BA2C-EE2E7B9E1EFC</a:ObjectID>
+<a:Name>oper_id</a:Name>
+<a:Code>oper_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>日志主键</a:Comment>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+<a:Identity>1</a:Identity>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o125">
+<a:ObjectID>2103BC5C-E28D-4369-8369-E898B218587A</a:ObjectID>
+<a:Name>title</a:Name>
+<a:Code>title</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>模块标题</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(50)</a:DataType>
+<a:Length>50</a:Length>
+</o:Column>
+<o:Column Id="o126">
+<a:ObjectID>6816377B-3DB6-424A-99ED-1D20FEB30ED4</a:ObjectID>
+<a:Name>business_type</a:Name>
+<a:Code>business_type</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538296397</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>功能请求</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>int(2)</a:DataType>
+<a:Length>2</a:Length>
+</o:Column>
+<o:Column Id="o127">
+<a:ObjectID>9CA3B7C3-F52C-4E2E-893F-8E6EBA7B2667</a:ObjectID>
+<a:Name>method</a:Name>
+<a:Code>method</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>方法名称</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+</o:Column>
+<o:Column Id="o128">
+<a:ObjectID>A5744803-C050-4108-9D15-7A0B95F03642</a:ObjectID>
+<a:Name>operator_type</a:Name>
+<a:Code>operator_type</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538296397</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>来源渠道</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>int(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o129">
+<a:ObjectID>B0DF8235-6BC1-452C-8B30-A56F0430E4F5</a:ObjectID>
+<a:Name>oper_name</a:Name>
+<a:Code>oper_name</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538296397</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>登录账号</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(50)</a:DataType>
+<a:Length>50</a:Length>
+</o:Column>
+<o:Column Id="o130">
+<a:ObjectID>25315A12-4EB9-4B67-9E2C-9F40F8EF7FAB</a:ObjectID>
+<a:Name>dept_name</a:Name>
+<a:Code>dept_name</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>部门名称</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(50)</a:DataType>
+<a:Length>50</a:Length>
+</o:Column>
+<o:Column Id="o131">
+<a:ObjectID>7AF8602B-A1DA-4EA3-BFB2-7638F96A86C0</a:ObjectID>
+<a:Name>oper_url</a:Name>
+<a:Code>oper_url</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>请求URL</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(255)</a:DataType>
+<a:Length>255</a:Length>
+</o:Column>
+<o:Column Id="o132">
+<a:ObjectID>F2A56B63-7A56-43FA-8099-411F3578B30D</a:ObjectID>
+<a:Name>oper_ip</a:Name>
+<a:Code>oper_ip</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>主机地址</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(30)</a:DataType>
+<a:Length>30</a:Length>
+</o:Column>
+<o:Column Id="o133">
+<a:ObjectID>1EF1BAF6-F5C1-496C-98E0-8B10C37279A1</a:ObjectID>
+<a:Name>oper_param</a:Name>
+<a:Code>oper_param</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>请求参数</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(255)</a:DataType>
+<a:Length>255</a:Length>
+</o:Column>
+<o:Column Id="o134">
+<a:ObjectID>AA3F3A4E-D375-4232-B152-01DCFB8F6B6D</a:ObjectID>
+<a:Name>status</a:Name>
+<a:Code>status</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>操作状态 0正常 1异常</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>int(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o135">
+<a:ObjectID>29E44D4A-6AC7-4220-A502-4BFC8746397A</a:ObjectID>
+<a:Name>error_msg</a:Name>
+<a:Code>error_msg</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>错误消息</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(2000)</a:DataType>
+<a:Length>2000</a:Length>
+</o:Column>
+<o:Column Id="o136">
+<a:ObjectID>22343C35-D913-485B-862E-2CEF579AAF22</a:ObjectID>
+<a:Name>oper_time</a:Name>
+<a:Code>oper_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>操作时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o137">
+<a:ObjectID>C0561C20-CC22-471B-A764-414C0D378FD6</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<c:Key.Columns>
+<o:Column Ref="o124"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o137"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o24">
+<a:ObjectID>AA2CFBA5-FA97-4AF1-92FE-645370B5848D</a:ObjectID>
+<a:Name>sys_dict_type</a:Name>
+<a:Code>sys_dict_type</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297703</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>字典类型表</a:Comment>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o138">
+<a:ObjectID>79CB7D43-B999-4D92-9477-D3AFEBD94248</a:ObjectID>
+<a:Name>dict_id</a:Name>
+<a:Code>dict_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>字典主键</a:Comment>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+<a:Identity>1</a:Identity>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o139">
+<a:ObjectID>2490B755-3E0A-4935-97F0-2EFDF9A72D05</a:ObjectID>
+<a:Name>dict_name</a:Name>
+<a:Code>dict_name</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>字典名称</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+</o:Column>
+<o:Column Id="o140">
+<a:ObjectID>7421238A-82DB-4992-AA28-41726AB6A5D6</a:ObjectID>
+<a:Name>dict_type</a:Name>
+<a:Code>dict_type</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>字典类型</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+</o:Column>
+<o:Column Id="o141">
+<a:ObjectID>971D2FBD-1A24-4EE4-B943-9367609C7472</a:ObjectID>
+<a:Name>status</a:Name>
+<a:Code>status</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538296458</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>状态(0正常 1禁用)</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>char(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o142">
+<a:ObjectID>B8876246-5BBA-4A03-86D7-98CA4EBEE342</a:ObjectID>
+<a:Name>create_by</a:Name>
+<a:Code>create_by</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>创建者</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o143">
+<a:ObjectID>5237CED2-0853-41DE-ACF4-BE442BC9E112</a:ObjectID>
+<a:Name>create_time</a:Name>
+<a:Code>create_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>创建时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o144">
+<a:ObjectID>2CACFBC0-8349-4B3A-9183-208B18C9F56F</a:ObjectID>
+<a:Name>update_by</a:Name>
+<a:Code>update_by</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>更新者</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o145">
+<a:ObjectID>ABEE7806-4F61-4B97-980C-CA081F61CA7C</a:ObjectID>
+<a:Name>update_time</a:Name>
+<a:Code>update_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>更新时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o146">
+<a:ObjectID>3966B558-B911-45DE-86C6-57F3DB9267BA</a:ObjectID>
+<a:Name>remark</a:Name>
+<a:Code>remark</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>备注</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(500)</a:DataType>
+<a:Length>500</a:Length>
+</o:Column>
+<o:Column Id="o147">
+<a:ObjectID>AFC0A0ED-A469-40B2-A6C4-4616444830AA</a:ObjectID>
+<a:Name>unique</a:Name>
+<a:Code>unique</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:DataType>(dict_type)</a:DataType>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o148">
+<a:ObjectID>BAD40D8E-BC11-44F5-918E-B27CABBCB051</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<c:Key.Columns>
+<o:Column Ref="o138"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o148"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o26">
+<a:ObjectID>493D6B25-21D0-45B1-BBA0-764B9C09B57D</a:ObjectID>
+<a:Name>sys_dict_data</a:Name>
+<a:Code>sys_dict_data</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297709</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>字典数据表</a:Comment>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o149">
+<a:ObjectID>CFDB23A8-AE38-4051-973A-2DABAC8283F9</a:ObjectID>
+<a:Name>dict_code</a:Name>
+<a:Code>dict_code</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>字典编码</a:Comment>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+<a:Identity>1</a:Identity>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o150">
+<a:ObjectID>EAA405BD-12A8-472F-A42D-CDA6A82E291A</a:ObjectID>
+<a:Name>dict_sort</a:Name>
+<a:Code>dict_sort</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>字典排序</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>int(4)</a:DataType>
+<a:Length>4</a:Length>
+</o:Column>
+<o:Column Id="o151">
+<a:ObjectID>F13017F5-2AA0-4DE9-9DC2-A9A3D73A98E6</a:ObjectID>
+<a:Name>dict_label</a:Name>
+<a:Code>dict_label</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>字典标签</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+</o:Column>
+<o:Column Id="o152">
+<a:ObjectID>EEEC4136-823D-4892-9BB9-BB0B4ADD83E3</a:ObjectID>
+<a:Name>dict_value</a:Name>
+<a:Code>dict_value</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>字典键值</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+</o:Column>
+<o:Column Id="o153">
+<a:ObjectID>ADF5A383-D055-40BE-BBFC-06E2B93D4E6A</a:ObjectID>
+<a:Name>dict_type</a:Name>
+<a:Code>dict_type</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>字典类型</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+</o:Column>
+<o:Column Id="o154">
+<a:ObjectID>A0B2DDF2-251D-4701-9B00-6893C74CC449</a:ObjectID>
+<a:Name>css_class</a:Name>
+<a:Code>css_class</a:Code>
+<a:CreationDate>1538296497</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296556</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+</o:Column>
+<o:Column Id="o155">
+<a:ObjectID>3CBFBA8E-7609-458D-9E53-A825C3F307A2</a:ObjectID>
+<a:Name>list_class</a:Name>
+<a:Code>list_class</a:Code>
+<a:CreationDate>1538296497</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296556</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+</o:Column>
+<o:Column Id="o156">
+<a:ObjectID>BA974839-DEE0-4684-BBEF-6D7776C34354</a:ObjectID>
+<a:Name>is_default</a:Name>
+<a:Code>is_default</a:Code>
+<a:CreationDate>1538296497</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296556</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:DataType>char(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o157">
+<a:ObjectID>1676CDF5-01CA-4749-BA1D-6E5399257BD0</a:ObjectID>
+<a:Name>status</a:Name>
+<a:Code>status</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>状态(0正常 1禁用)</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>int(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o158">
+<a:ObjectID>8798B094-1AAF-4A23-B2F1-4C19DACF1AA3</a:ObjectID>
+<a:Name>create_by</a:Name>
+<a:Code>create_by</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>创建者</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o159">
+<a:ObjectID>D1CB9293-D762-403C-85CB-4B974ACF7328</a:ObjectID>
+<a:Name>create_time</a:Name>
+<a:Code>create_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>创建时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o160">
+<a:ObjectID>5A34AF87-B25E-4349-9713-69DC50F6F5F2</a:ObjectID>
+<a:Name>update_by</a:Name>
+<a:Code>update_by</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>更新者</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o161">
+<a:ObjectID>3204FBAC-1F61-4571-ADC4-BF1BE9CED85A</a:ObjectID>
+<a:Name>update_time</a:Name>
+<a:Code>update_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>更新时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o162">
+<a:ObjectID>B7DE1842-809C-4401-9C80-C9A37DF9B053</a:ObjectID>
+<a:Name>remark</a:Name>
+<a:Code>remark</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>备注</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(500)</a:DataType>
+<a:Length>500</a:Length>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o163">
+<a:ObjectID>2809F417-7FA5-48DA-B613-662C7C28061E</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<c:Key.Columns>
+<o:Column Ref="o149"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o163"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o28">
+<a:ObjectID>0A7C2F56-6E3B-4E70-A549-0EC60779D180</a:ObjectID>
+<a:Name>sys_logininfor</a:Name>
+<a:Code>sys_logininfor</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297756</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>系统访问记录</a:Comment>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o164">
+<a:ObjectID>5CB5D942-D52B-487D-BC86-476481B0FB8D</a:ObjectID>
+<a:Name>info_id</a:Name>
+<a:Code>info_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>访问ID</a:Comment>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+<a:Identity>1</a:Identity>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o165">
+<a:ObjectID>A1C66DBC-9DB7-428B-9275-3D014B6CE388</a:ObjectID>
+<a:Name>login_name</a:Name>
+<a:Code>login_name</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>登录账号</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(50)</a:DataType>
+<a:Length>50</a:Length>
+</o:Column>
+<o:Column Id="o166">
+<a:ObjectID>8E0F50A6-F98D-48B0-8D9D-78F3A76ED171</a:ObjectID>
+<a:Name>ipaddr</a:Name>
+<a:Code>ipaddr</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>登录IP地址</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(50)</a:DataType>
+<a:Length>50</a:Length>
+</o:Column>
+<o:Column Id="o167">
+<a:ObjectID>91B70723-1A7E-4277-A100-63B775A504B3</a:ObjectID>
+<a:Name>login_location</a:Name>
+<a:Code>login_location</a:Code>
+<a:CreationDate>1538297350</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538297369</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:DataType>varchar(255)</a:DataType>
+<a:Length>255</a:Length>
+</o:Column>
+<o:Column Id="o168">
+<a:ObjectID>AA04F533-A044-428B-80F8-515B6BB1A302</a:ObjectID>
+<a:Name>browser</a:Name>
+<a:Code>browser</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>浏览器类型</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(50)</a:DataType>
+<a:Length>50</a:Length>
+</o:Column>
+<o:Column Id="o169">
+<a:ObjectID>D37570E9-9EEE-4349-B875-494A5415C736</a:ObjectID>
+<a:Name>os</a:Name>
+<a:Code>os</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>操作系统</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(50)</a:DataType>
+<a:Length>50</a:Length>
+</o:Column>
+<o:Column Id="o170">
+<a:ObjectID>CF10A80C-123E-42F3-A2DD-1B770E5F9D86</a:ObjectID>
+<a:Name>status</a:Name>
+<a:Code>status</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>登录状态 0成功 1失败</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>int(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o171">
+<a:ObjectID>9113784E-932A-4FAF-82CB-A75B8C827309</a:ObjectID>
+<a:Name>msg</a:Name>
+<a:Code>msg</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>提示消息</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(255)</a:DataType>
+<a:Length>255</a:Length>
+</o:Column>
+<o:Column Id="o172">
+<a:ObjectID>BCA519C6-19C9-45DF-A0B5-F88E9E6D3557</a:ObjectID>
+<a:Name>login_time</a:Name>
+<a:Code>login_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>访问时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o173">
+<a:ObjectID>C14E656C-0645-49EB-8B42-AD82232E0416</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<c:Key.Columns>
+<o:Column Ref="o164"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o173"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o30">
+<a:ObjectID>4DCA223F-E98B-4D8B-A71C-CFB438C15488</a:ObjectID>
+<a:Name>sys_user_online</a:Name>
+<a:Code>sys_user_online</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297754</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>在线用户记录</a:Comment>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o174">
+<a:ObjectID>7FCC57CE-47DD-4948-B949-10401B2FC7B1</a:ObjectID>
+<a:Name>sessionId</a:Name>
+<a:Code>sessionId</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>用户会话id</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(50)</a:DataType>
+<a:Length>50</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o175">
+<a:ObjectID>FDE5B59D-8CF7-4AAE-987F-3FF2AEBE22CB</a:ObjectID>
+<a:Name>login_name</a:Name>
+<a:Code>login_name</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>登录账号</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(50)</a:DataType>
+<a:Length>50</a:Length>
+</o:Column>
+<o:Column Id="o176">
+<a:ObjectID>AB65FF92-33A0-42C8-8B3F-454A1FAD5615</a:ObjectID>
+<a:Name>dept_name</a:Name>
+<a:Code>dept_name</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>部门名称</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(50)</a:DataType>
+<a:Length>50</a:Length>
+</o:Column>
+<o:Column Id="o177">
+<a:ObjectID>C4DAF2D0-9CDC-476B-A011-FF5D302371EB</a:ObjectID>
+<a:Name>ipaddr</a:Name>
+<a:Code>ipaddr</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>登录IP地址</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(50)</a:DataType>
+<a:Length>50</a:Length>
+</o:Column>
+<o:Column Id="o178">
+<a:ObjectID>C8243FB0-425B-4A74-9ADA-C93B15E713EA</a:ObjectID>
+<a:Name>login_location</a:Name>
+<a:Code>login_location</a:Code>
+<a:CreationDate>1538297178</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538297216</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:DataType>varchar(255)</a:DataType>
+<a:Length>255</a:Length>
+</o:Column>
+<o:Column Id="o179">
+<a:ObjectID>89EC40B0-0C22-4811-90BB-BEA385ACDF20</a:ObjectID>
+<a:Name>browser</a:Name>
+<a:Code>browser</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>浏览器类型</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(50)</a:DataType>
+<a:Length>50</a:Length>
+</o:Column>
+<o:Column Id="o180">
+<a:ObjectID>AC455631-CFE0-45BB-A0C5-788D695E4B6C</a:ObjectID>
+<a:Name>os</a:Name>
+<a:Code>os</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>操作系统</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(50)</a:DataType>
+<a:Length>50</a:Length>
+</o:Column>
+<o:Column Id="o181">
+<a:ObjectID>5C56E3C9-4591-4762-89E1-C9BBFECB5F11</a:ObjectID>
+<a:Name>status</a:Name>
+<a:Code>status</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>在线状态on_line在线off_line离线</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(10)</a:DataType>
+<a:Length>10</a:Length>
+</o:Column>
+<o:Column Id="o182">
+<a:ObjectID>0CAF2F1F-459F-4F78-9075-D95F924A4FF7</a:ObjectID>
+<a:Name>start_timestamp</a:Name>
+<a:Code>start_timestamp</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>session创建时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o183">
+<a:ObjectID>6AE6BDED-823E-4455-9A9F-338EC6F7BDB9</a:ObjectID>
+<a:Name>last_access_time</a:Name>
+<a:Code>last_access_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>session最后访问时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o184">
+<a:ObjectID>CE390924-4628-421C-979F-002C2952E99E</a:ObjectID>
+<a:Name>expire_time</a:Name>
+<a:Code>expire_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>超时时间,单位为分钟</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>int(5)</a:DataType>
+<a:Length>5</a:Length>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o185">
+<a:ObjectID>365CC94D-6124-42C7-96BD-376B84B709F7</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<c:Key.Columns>
+<o:Column Ref="o174"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o185"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o32">
+<a:ObjectID>AFCBF4DB-07EC-42D1-ACA7-56B5038F5AC5</a:ObjectID>
+<a:Name>sys_job</a:Name>
+<a:Code>sys_job</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297732</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>定时任务调度表</a:Comment>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o186">
+<a:ObjectID>1658CED4-3885-4094-AB70-F35408EBCD5E</a:ObjectID>
+<a:Name>job_id</a:Name>
+<a:Code>job_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>任务ID</a:Comment>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+<a:Identity>1</a:Identity>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o187">
+<a:ObjectID>731E7147-E3A4-4D93-8C7C-BB1C6D94DB9E</a:ObjectID>
+<a:Name>job_name</a:Name>
+<a:Code>job_name</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>任务名称</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o188">
+<a:ObjectID>C64B3655-C240-44F0-83B4-F42FB76C8BEA</a:ObjectID>
+<a:Name>job_group</a:Name>
+<a:Code>job_group</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>任务组名</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o189">
+<a:ObjectID>9F7E735D-B823-4ADA-BA3D-8FFFFEC92F5C</a:ObjectID>
+<a:Name>method_name</a:Name>
+<a:Code>method_name</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>任务方法</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(500)</a:DataType>
+<a:Length>500</a:Length>
+</o:Column>
+<o:Column Id="o190">
+<a:ObjectID>28EEE4F4-E8E7-4052-8F10-88D6C74C595D</a:ObjectID>
+<a:Name>method_params</a:Name>
+<a:Code>method_params</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297298</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>方法参数</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(200)</a:DataType>
+<a:Length>200</a:Length>
+</o:Column>
+<o:Column Id="o191">
+<a:ObjectID>C8986FAD-E2E7-4364-9E8B-B75366B9A4ED</a:ObjectID>
+<a:Name>cron_expression</a:Name>
+<a:Code>cron_expression</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>cron执行表达式</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(255)</a:DataType>
+<a:Length>255</a:Length>
+</o:Column>
+<o:Column Id="o192">
+<a:ObjectID>FD188167-AC02-4161-BE89-D63E61412313</a:ObjectID>
+<a:Name>misfire_policy</a:Name>
+<a:Code>misfire_policy</a:Code>
+<a:CreationDate>1538297273</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538297298</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:DataType>varchar(20)</a:DataType>
+<a:Length>20</a:Length>
+</o:Column>
+<o:Column Id="o193">
+<a:ObjectID>2D4B6C8F-EEE8-4474-9D20-8206A7E80362</a:ObjectID>
+<a:Name>status</a:Name>
+<a:Code>status</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>状态(0正常 1暂停)</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>int(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o194">
+<a:ObjectID>CA78AC7F-19E7-47BC-BF7B-9F31EFB02702</a:ObjectID>
+<a:Name>create_by</a:Name>
+<a:Code>create_by</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>创建者</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o195">
+<a:ObjectID>B8F807AE-9F19-4FCA-BA98-7BF71DD0CA02</a:ObjectID>
+<a:Name>create_time</a:Name>
+<a:Code>create_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>创建时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o196">
+<a:ObjectID>3FBB42FA-ED0F-4D7C-99D0-5F7AF7B0F1DD</a:ObjectID>
+<a:Name>update_by</a:Name>
+<a:Code>update_by</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>更新者</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o197">
+<a:ObjectID>1C5863D2-A8B9-43DB-AA06-F8BE3E01093B</a:ObjectID>
+<a:Name>update_time</a:Name>
+<a:Code>update_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>更新时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o198">
+<a:ObjectID>889C3FF9-BB1E-4EB1-AFE9-1D1155984915</a:ObjectID>
+<a:Name>remark</a:Name>
+<a:Code>remark</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>备注信息</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(500)</a:DataType>
+<a:Length>500</a:Length>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o199">
+<a:ObjectID>38106F1A-4FFB-4EC0-B979-55BD6C6C6FF7</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<c:Key.Columns>
+<o:Column Ref="o186"/>
+<o:Column Ref="o187"/>
+<o:Column Ref="o188"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o199"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o34">
+<a:ObjectID>CF7C8958-5494-48C6-BE05-83F2CF8C7513</a:ObjectID>
+<a:Name>sys_job_log</a:Name>
+<a:Code>sys_job_log</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297742</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>定时任务调度日志表</a:Comment>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o200">
+<a:ObjectID>308F32A1-A8EC-4002-9993-DF9234A303B7</a:ObjectID>
+<a:Name>job_log_id</a:Name>
+<a:Code>job_log_id</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>任务日志ID</a:Comment>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+<a:Identity>1</a:Identity>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o201">
+<a:ObjectID>F4D55B65-BB6B-4182-A6D6-F9CAABC19110</a:ObjectID>
+<a:Name>job_name</a:Name>
+<a:Code>job_name</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>任务名称</a:Comment>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o202">
+<a:ObjectID>8AF383A0-01C0-4947-8384-FF0F13AC00AE</a:ObjectID>
+<a:Name>job_group</a:Name>
+<a:Code>job_group</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>任务组名</a:Comment>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o203">
+<a:ObjectID>96582B76-F1E9-4473-BA51-01B87B5F459E</a:ObjectID>
+<a:Name>method_name</a:Name>
+<a:Code>method_name</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>任务方法</a:Comment>
+<a:DataType>varchar(500)</a:DataType>
+<a:Length>500</a:Length>
+</o:Column>
+<o:Column Id="o204">
+<a:ObjectID>2AB02ABA-02E3-4F72-95BA-4261A7F5729A</a:ObjectID>
+<a:Name>method_params</a:Name>
+<a:Code>method_params</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297325</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>方法参数</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(200)</a:DataType>
+<a:Length>200</a:Length>
+</o:Column>
+<o:Column Id="o205">
+<a:ObjectID>8EB39444-CBFF-43AA-AA37-49217EF545B6</a:ObjectID>
+<a:Name>job_message</a:Name>
+<a:Code>job_message</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>日志信息</a:Comment>
+<a:DataType>varchar(500)</a:DataType>
+<a:Length>500</a:Length>
+</o:Column>
+<o:Column Id="o206">
+<a:ObjectID>18CD263C-0F57-4EDF-999E-1B5A7EE2BFF9</a:ObjectID>
+<a:Name>is_exception</a:Name>
+<a:Code>is_exception</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538297325</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>是否异常</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>char(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o207">
+<a:ObjectID>634ECD78-2251-43EB-B6CF-DF7FA9DA4354</a:ObjectID>
+<a:Name>exception_info</a:Name>
+<a:Code>exception_info</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>异常信息</a:Comment>
+<a:DataType>text</a:DataType>
+</o:Column>
+<o:Column Id="o208">
+<a:ObjectID>4EC075CC-507B-43D7-860F-34DAAEB1DBBF</a:ObjectID>
+<a:Name>create_time</a:Name>
+<a:Code>create_time</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<a:Comment>创建时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o209">
+<a:ObjectID>A87DCE10-894A-4CF7-B39C-AF18202C7F86</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1524449375</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449375</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+<c:Key.Columns>
+<o:Column Ref="o200"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o209"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o36">
+<a:ObjectID>FD6284E8-B6D4-43AF-A038-9C97DCD403DC</a:ObjectID>
+<a:Name>sys_role_dept</a:Name>
+<a:Code>sys_role_dept</a:Code>
+<a:CreationDate>1538296083</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538297689</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>角色和部门关联表</a:Comment>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o210">
+<a:ObjectID>2BC66204-4193-42E6-BB7B-7AD57C9E5BEF</a:ObjectID>
+<a:Name>role_id</a:Name>
+<a:Code>role_id</a:Code>
+<a:CreationDate>1538296083</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296150</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>用户ID</a:Comment>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o211">
+<a:ObjectID>A32BC025-6437-41AB-BAA4-3A150E406781</a:ObjectID>
+<a:Name>dept_id</a:Name>
+<a:Code>dept_id</a:Code>
+<a:CreationDate>1538296083</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296150</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>岗位ID</a:Comment>
+<a:DataType>int(11)</a:DataType>
+<a:Length>11</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o212">
+<a:ObjectID>315FFED5-B0A0-4649-8255-2283896340C9</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1538296083</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296083</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<c:Key.Columns>
+<o:Column Ref="o210"/>
+<o:Column Ref="o211"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o212"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o38">
+<a:ObjectID>45EB995C-F5F6-4818-AEB1-2038DEBA9CEE</a:ObjectID>
+<a:Name>sys_config</a:Name>
+<a:Code>sys_config</a:Code>
+<a:CreationDate>1538296587</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538297714</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>参数配置表</a:Comment>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o213">
+<a:ObjectID>667C4616-146B-475C-8111-4720375D762C</a:ObjectID>
+<a:Name>config_id</a:Name>
+<a:Code>config_id</a:Code>
+<a:CreationDate>1538296587</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296691</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>字典编码</a:Comment>
+<a:DataType>int(5)</a:DataType>
+<a:Length>5</a:Length>
+<a:Identity>1</a:Identity>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o214">
+<a:ObjectID>EA798E0B-0CBE-4897-B0AF-1F2D3CD6DEF4</a:ObjectID>
+<a:Name>config_name</a:Name>
+<a:Code>config_name</a:Code>
+<a:CreationDate>1538296587</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296691</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>字典排序</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+</o:Column>
+<o:Column Id="o215">
+<a:ObjectID>A9A2A6E0-C914-4516-AE4C-F33CE71B92E8</a:ObjectID>
+<a:Name>config_key</a:Name>
+<a:Code>config_key</a:Code>
+<a:CreationDate>1538296587</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296691</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>字典标签</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+</o:Column>
+<o:Column Id="o216">
+<a:ObjectID>24CCA897-8671-402E-8229-9ED0C80C176A</a:ObjectID>
+<a:Name>config_value</a:Name>
+<a:Code>config_value</a:Code>
+<a:CreationDate>1538296587</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296691</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>字典键值</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(100)</a:DataType>
+<a:Length>100</a:Length>
+</o:Column>
+<o:Column Id="o217">
+<a:ObjectID>B4E76B1D-BFAF-42F3-8CCA-8B5A8CC7CBFF</a:ObjectID>
+<a:Name>config_type</a:Name>
+<a:Code>config_type</a:Code>
+<a:CreationDate>1538296587</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296691</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>字典类型</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>char(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o218">
+<a:ObjectID>A6AC1891-F5C4-45B3-8CAB-8F4CE8B8BF08</a:ObjectID>
+<a:Name>create_by</a:Name>
+<a:Code>create_by</a:Code>
+<a:CreationDate>1538296587</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296587</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>创建者</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o219">
+<a:ObjectID>CC1E0367-A079-49A0-8F0A-FE5F7B3EB6EA</a:ObjectID>
+<a:Name>create_time</a:Name>
+<a:Code>create_time</a:Code>
+<a:CreationDate>1538296587</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296587</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>创建时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o220">
+<a:ObjectID>081CD54E-AE38-4696-A326-F829B8EA5737</a:ObjectID>
+<a:Name>update_by</a:Name>
+<a:Code>update_by</a:Code>
+<a:CreationDate>1538296587</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296587</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>更新者</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o221">
+<a:ObjectID>E2118ECE-8F52-4FBA-B18A-F30FFB2BDD20</a:ObjectID>
+<a:Name>update_time</a:Name>
+<a:Code>update_time</a:Code>
+<a:CreationDate>1538296587</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296587</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>更新时间</a:Comment>
+<a:DataType>timestamp</a:DataType>
+</o:Column>
+<o:Column Id="o222">
+<a:ObjectID>55A16121-8932-465E-8427-EBDA39B2B900</a:ObjectID>
+<a:Name>remark</a:Name>
+<a:Code>remark</a:Code>
+<a:CreationDate>1538296587</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296587</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>备注</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>varchar(500)</a:DataType>
+<a:Length>500</a:Length>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o223">
+<a:ObjectID>0F331278-2804-496A-A87B-B0944C80FB82</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1538296587</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538296587</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<c:Key.Columns>
+<o:Column Ref="o213"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o223"/>
+</c:PrimaryKey>
+</o:Table>
+<o:Table Id="o41">
+<a:ObjectID>F33DE1D6-C12D-43DB-A502-83BD1615F081</a:ObjectID>
+<a:Name>sys_notice</a:Name>
+<a:Code>sys_notice</a:Code>
+<a:CreationDate>1538297386</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538297746</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>通知公告表</a:Comment>
+<a:TotalSavingCurrency/>
+<c:Columns>
+<o:Column Id="o224">
+<a:ObjectID>FF4A9744-D7CA-450E-8AD7-B3E7E90075CE</a:ObjectID>
+<a:Name>notice_id</a:Name>
+<a:Code>notice_id</a:Code>
+<a:CreationDate>1538297386</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538297496</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>任务日志ID</a:Comment>
+<a:DataType>int(4)</a:DataType>
+<a:Length>4</a:Length>
+<a:Identity>1</a:Identity>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o225">
+<a:ObjectID>E2B08825-4C94-4209-80B2-21A7AD8CBF2D</a:ObjectID>
+<a:Name>notice_title</a:Name>
+<a:Code>notice_title</a:Code>
+<a:CreationDate>1538297386</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538297496</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>任务名称</a:Comment>
+<a:DataType>varchar(50)</a:DataType>
+<a:Length>50</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o226">
+<a:ObjectID>04414862-9ABC-4431-B1B7-B44ECC08CB6E</a:ObjectID>
+<a:Name>notice_type</a:Name>
+<a:Code>notice_type</a:Code>
+<a:CreationDate>1538297386</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538297496</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>任务组名</a:Comment>
+<a:DataType>char(2)</a:DataType>
+<a:Length>2</a:Length>
+<a:Mandatory>1</a:Mandatory>
+</o:Column>
+<o:Column Id="o227">
+<a:ObjectID>E829DAD1-E3F9-4AED-A3DE-59CE4340333E</a:ObjectID>
+<a:Name>notice_content</a:Name>
+<a:Code>notice_content</a:Code>
+<a:CreationDate>1538297386</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538297496</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>任务方法</a:Comment>
+<a:DataType>varchar(500)</a:DataType>
+<a:Length>500</a:Length>
+</o:Column>
+<o:Column Id="o228">
+<a:ObjectID>2EABC8DB-6700-4717-89A3-31461C4CB2D5</a:ObjectID>
+<a:Name>status</a:Name>
+<a:Code>status</a:Code>
+<a:CreationDate>1538297386</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538297496</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>方法参数</a:Comment>
+<a:DefaultValue>&#39;&#39;</a:DefaultValue>
+<a:DataType>char(1)</a:DataType>
+<a:Length>1</a:Length>
+</o:Column>
+<o:Column Id="o229">
+<a:ObjectID>448D3EB6-DE24-4BE3-9C29-1FC3C71B0E8D</a:ObjectID>
+<a:Name>create_by</a:Name>
+<a:Code>create_by</a:Code>
+<a:CreationDate>1538297386</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538297496</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>日志信息</a:Comment>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o230">
+<a:ObjectID>770ED87D-D4D7-499C-A266-7A54051B1A84</a:ObjectID>
+<a:Name>create_time1</a:Name>
+<a:Code>create_time1</a:Code>
+<a:CreationDate>1538297386</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538297496</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>是否异常</a:Comment>
+<a:DefaultValue>0</a:DefaultValue>
+<a:DataType>datetime</a:DataType>
+</o:Column>
+<o:Column Id="o231">
+<a:ObjectID>12DDF399-7CCB-4117-8B05-6AA9BEE845E5</a:ObjectID>
+<a:Name>update_by</a:Name>
+<a:Code>update_by</a:Code>
+<a:CreationDate>1538297386</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538297496</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>异常信息</a:Comment>
+<a:DataType>varchar(64)</a:DataType>
+<a:Length>64</a:Length>
+</o:Column>
+<o:Column Id="o232">
+<a:ObjectID>FE101CE4-9B66-4097-944D-36B01A9E2219</a:ObjectID>
+<a:Name>update_time1</a:Name>
+<a:Code>update_time1</a:Code>
+<a:CreationDate>1538297400</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538297496</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:DataType>datetime</a:DataType>
+</o:Column>
+<o:Column Id="o233">
+<a:ObjectID>D5F1728C-01D0-4C00-9AD6-AAA14228104B</a:ObjectID>
+<a:Name>remark</a:Name>
+<a:Code>remark</a:Code>
+<a:CreationDate>1538297386</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538297496</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:Comment>创建时间</a:Comment>
+<a:DataType>varchar(255)</a:DataType>
+<a:Length>255</a:Length>
+</o:Column>
+</c:Columns>
+<c:Keys>
+<o:Key Id="o234">
+<a:ObjectID>43C7AC1D-CE7A-4B55-A474-8CB2376D446F</a:ObjectID>
+<a:Name>Key_1</a:Name>
+<a:Code>Key_1</a:Code>
+<a:CreationDate>1538297386</a:CreationDate>
+<a:Creator>admin</a:Creator>
+<a:ModificationDate>1538297386</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<c:Key.Columns>
+<o:Column Ref="o224"/>
+</c:Key.Columns>
+</o:Key>
+</c:Keys>
+<c:PrimaryKey>
+<o:Key Ref="o234"/>
+</c:PrimaryKey>
+</o:Table>
+</c:Tables>
+<c:DefaultGroups>
+<o:Group Id="o235">
+<a:ObjectID>F2EBEA5B-F352-45CB-B349-39158064CEE8</a:ObjectID>
+<a:Name>PUBLIC</a:Name>
+<a:Code>PUBLIC</a:Code>
+<a:CreationDate>1524449325</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1524449325</a:ModificationDate>
+<a:Modifier>Administrator</a:Modifier>
+</o:Group>
+</c:DefaultGroups>
+<c:TargetModels>
+<o:TargetModel Id="o236">
+<a:ObjectID>41740AEF-D7FB-4738-ABDF-47C3287A6AF6</a:ObjectID>
+<a:Name>MySQL 5.0</a:Name>
+<a:Code>MYSQL50</a:Code>
+<a:CreationDate>1524449337</a:CreationDate>
+<a:Creator>Administrator</a:Creator>
+<a:ModificationDate>1538295558</a:ModificationDate>
+<a:Modifier>admin</a:Modifier>
+<a:TargetModelURL>file:///%_DBMS%/mysql50.xdb</a:TargetModelURL>
+<a:TargetModelID>F4F16ECD-F2F1-4006-AF6F-638D5C65F35E</a:TargetModelID>
+<a:TargetModelClassID>4BA9F647-DAB1-11D1-9944-006097355D9B</a:TargetModelClassID>
+<c:SessionShortcuts>
+<o:Shortcut Ref="o3"/>
+</c:SessionShortcuts>
+</o:TargetModel>
+</c:TargetModels>
+</o:Model>
+</c:Children>
+</o:RootObject>
+
+</Model>
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/common/constant/CommonMap.java b/src/main/java/com/ruoyi/common/constant/CommonMap.java
deleted file mode 100644
index 3295ffe9..00000000
--- a/src/main/java/com/ruoyi/common/constant/CommonMap.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.ruoyi.common.constant;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 通用数据库映射Map数据
- * 
- * @author ruoyi
- */
-public class CommonMap
-{
-    /** 状态编码转换 */
-    public static Map<String, String> javaTypeMap = new HashMap<String, String>();
-
-    static
-    {
-        initJavaTypeMap();
-    }
-
-    /**
-     * 返回状态映射
-     */
-    public static void initJavaTypeMap()
-    {
-        javaTypeMap.put("tinyint", "Integer");
-        javaTypeMap.put("smallint", "Integer");
-        javaTypeMap.put("mediumint", "Integer");
-        javaTypeMap.put("int", "Integer");
-        javaTypeMap.put("integer", "integer");
-        javaTypeMap.put("bigint", "Long");
-        javaTypeMap.put("float", "Float");
-        javaTypeMap.put("double", "Double");
-        javaTypeMap.put("decimal", "BigDecimal");
-        javaTypeMap.put("bit", "Boolean");
-        javaTypeMap.put("char", "String");
-        javaTypeMap.put("varchar", "String");
-        javaTypeMap.put("tinytext", "String");
-        javaTypeMap.put("text", "String");
-        javaTypeMap.put("mediumtext", "String");
-        javaTypeMap.put("longtext", "String");
-        javaTypeMap.put("time", "Date");
-        javaTypeMap.put("date", "Date");
-        javaTypeMap.put("datetime", "Date");
-        javaTypeMap.put("timestamp", "Date");
-    }
-}
diff --git a/src/main/java/com/ruoyi/common/utils/TreeUtils.java b/src/main/java/com/ruoyi/common/utils/TreeUtils.java
deleted file mode 100644
index fe6c97dd..00000000
--- a/src/main/java/com/ruoyi/common/utils/TreeUtils.java
+++ /dev/null
@@ -1,143 +0,0 @@
-package com.ruoyi.common.utils;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import com.ruoyi.project.system.menu.domain.Menu;
-
-/**
- * 权限数据处理
- * 
- * @author ruoyi
- */
-public class TreeUtils
-{
-    /**
-     * 根据父节点的ID获取所有子节点
-     * 
-     * @param list 分类表
-     * @param typeId 传入的父节点ID
-     * @return String
-     */
-    public static List<Menu> getChildPerms(List<Menu> list, int parentId)
-    {
-        List<Menu> returnList = new ArrayList<Menu>();
-        for (Iterator<Menu> iterator = list.iterator(); iterator.hasNext();)
-        {
-            Menu t = (Menu) iterator.next();
-            // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
-            if (t.getParentId() == parentId)
-            {
-                recursionFn(list, t);
-                returnList.add(t);
-            }
-        }
-        return returnList;
-    }
-
-    /**
-     * 递归列表
-     * 
-     * @param list
-     * @param Menu
-     */
-    private static void recursionFn(List<Menu> list, Menu t)
-    {
-        // 得到子节点列表
-        List<Menu> childList = getChildList(list, t);
-        t.setChildren(childList);
-        for (Menu tChild : childList)
-        {
-            if (hasChild(list, tChild))
-            {
-                // 判断是否有子节点
-                Iterator<Menu> it = childList.iterator();
-                while (it.hasNext())
-                {
-                    Menu n = (Menu) it.next();
-                    recursionFn(list, n);
-                }
-            }
-        }
-    }
-
-    /**
-     * 得到子节点列表
-     */
-    private static List<Menu> getChildList(List<Menu> list, Menu t)
-    {
-
-        List<Menu> tlist = new ArrayList<Menu>();
-        Iterator<Menu> it = list.iterator();
-        while (it.hasNext())
-        {
-            Menu n = (Menu) it.next();
-            if (n.getParentId().longValue() == t.getMenuId().longValue())
-            {
-                tlist.add(n);
-            }
-        }
-        return tlist;
-    }
-
-    List<Menu> returnList = new ArrayList<Menu>();
-
-    /**
-     * 根据父节点的ID获取所有子节点
-     * 
-     * @param list 分类表
-     * @param typeId 传入的父节点ID
-     * @param prefix 子节点前缀
-     */
-    public List<Menu> getChildPerms(List<Menu> list, int typeId, String prefix)
-    {
-        if (list == null)
-        {
-            return null;
-        }
-        for (Iterator<Menu> iterator = list.iterator(); iterator.hasNext();)
-        {
-            Menu node = (Menu) iterator.next();
-            // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
-            if (node.getParentId() == typeId)
-            {
-                recursionFn(list, node, prefix);
-            }
-            // 二、遍历所有的父节点下的所有子节点
-            /*
-             * if (node.getParentId()==0) { recursionFn(list, node); }
-             */
-        }
-        return returnList;
-    }
-
-    private void recursionFn(List<Menu> list, Menu node, String p)
-    {
-        // 得到子节点列表
-        List<Menu> childList = getChildList(list, node);
-        if (hasChild(list, node))
-        {
-            // 判断是否有子节点
-            returnList.add(node);
-            Iterator<Menu> it = childList.iterator();
-            while (it.hasNext())
-            {
-                Menu n = (Menu) it.next();
-                n.setMenuName(p + n.getMenuName());
-                recursionFn(list, n, p + p);
-            }
-        }
-        else
-        {
-            returnList.add(node);
-        }
-    }
-
-    /**
-     * 判断是否有子节点
-     */
-    private static boolean hasChild(List<Menu> list, Menu t)
-    {
-        return getChildList(list, t).size() > 0 ? true : false;
-    }
-}
diff --git a/src/main/java/com/ruoyi/framework/config/RuoYiConfig.java b/src/main/java/com/ruoyi/framework/config/RuoYiConfig.java
deleted file mode 100644
index 4e1a0c7d..00000000
--- a/src/main/java/com/ruoyi/framework/config/RuoYiConfig.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.ruoyi.framework.config;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-/**
- * 读取项目相关配置
- * 
- * @author ruoyi
- */
-@Component
-@ConfigurationProperties(prefix = "ruoyi")
-public class RuoYiConfig
-{
-    /** 项目名称 */
-    private String name;
-    /** 版本 */
-    private String version;
-    /** 版权年份 */
-    private String copyrightYear;
-    /** 上传路径 */
-    private static String profile;
-    /** 获取地址开关 */
-    private static boolean addressEnabled;
-
-    public String getName()
-    {
-        return name;
-    }
-
-    public void setName(String name)
-    {
-        this.name = name;
-    }
-
-    public String getVersion()
-    {
-        return version;
-    }
-
-    public void setVersion(String version)
-    {
-        this.version = version;
-    }
-
-    public String getCopyrightYear()
-    {
-        return copyrightYear;
-    }
-
-    public void setCopyrightYear(String copyrightYear)
-    {
-        this.copyrightYear = copyrightYear;
-    }
-
-    public static String getProfile()
-    {
-        return profile;
-    }
-
-    public void setProfile(String profile)
-    {
-        RuoYiConfig.profile = profile;
-    }
-
-    public static boolean isAddressEnabled()
-    {
-        return addressEnabled;
-    }
-
-    public void setAddressEnabled(boolean addressEnabled)
-    {
-        RuoYiConfig.addressEnabled = addressEnabled;
-    }
-
-    public static String getAvatarPath()
-    {
-        return profile + "avatar/";
-    }
-
-    public static String getDownloadPath()
-    {
-        return profile + "download/";
-    }
-}