├── src ├── main │ ├── resources │ │ ├── resource │ │ │ ├── active.properties │ │ │ ├── db-DEV.properties │ │ │ ├── db-PROD.properties │ │ │ ├── kettle_PROD.properties │ │ │ └── kettle-DEV.properties │ │ ├── btsql-ext.properties │ │ ├── kettle-lifecycle-listeners.xml │ │ ├── kettle-registry-extensions.xml │ │ ├── spring │ │ │ ├── applicationContext-service.xml │ │ │ ├── spring-mvc.xml │ │ │ └── applicationContext-beetlsql.xml │ │ ├── quartz.properties │ │ ├── log4j.properties │ │ └── sql │ │ │ ├── mysql │ │ │ ├── kJob.md │ │ │ ├── kTrans.md │ │ │ ├── kJobMonitor.md │ │ │ └── kTransMonitor.md │ │ │ └── oracle │ │ │ ├── kJob.md │ │ │ ├── dimEtlConfig.md │ │ │ ├── kTrans.md │ │ │ ├── kJobMonitor.md │ │ │ └── kTransMonitor.md │ ├── webapp │ │ ├── static │ │ │ ├── lib │ │ │ │ ├── jquery-backstretch │ │ │ │ │ ├── .gitignore │ │ │ │ │ └── .bower.json │ │ │ │ ├── metronic │ │ │ │ │ ├── img │ │ │ │ │ │ ├── dash.jpg │ │ │ │ │ │ ├── bg-white.png │ │ │ │ │ │ ├── bg-opacity.png │ │ │ │ │ │ ├── bg-white-lock.png │ │ │ │ │ │ ├── syncfusion-icons.png │ │ │ │ │ │ ├── remove-icon-small.png │ │ │ │ │ │ ├── inbox-nav-arrow-blue.png │ │ │ │ │ │ └── syncfusion-icons-white.png │ │ │ │ │ └── fonts │ │ │ │ │ │ ├── v10 │ │ │ │ │ │ ├── uYKcPVoh6c5R0NpdEY5A-Q.woff │ │ │ │ │ │ ├── DXI1ORHCpsQm3Vp6mXoaTRsxEYwM7FgeyaSgU71cLG0.woff │ │ │ │ │ │ ├── MTP_ySUJH_bn48VBG8sNShsxEYwM7FgeyaSgU71cLG0.woff │ │ │ │ │ │ └── k3k702ZOKiLJc3WVjuplzBsxEYwM7FgeyaSgU71cLG0.woff │ │ │ │ │ │ └── font.css │ │ │ │ ├── bootstrap-fileinput │ │ │ │ │ ├── img │ │ │ │ │ │ ├── loading.gif │ │ │ │ │ │ └── loading-sm.gif │ │ │ │ │ ├── themes │ │ │ │ │ │ ├── fa │ │ │ │ │ │ │ ├── theme.min.js │ │ │ │ │ │ │ └── theme.js │ │ │ │ │ │ ├── gly │ │ │ │ │ │ │ ├── theme.min.js │ │ │ │ │ │ │ └── theme.js │ │ │ │ │ │ └── explorer │ │ │ │ │ │ │ ├── theme.min.js │ │ │ │ │ │ │ └── theme.js │ │ │ │ │ └── css │ │ │ │ │ │ ├── fileinput-rtl.min.css │ │ │ │ │ │ └── fileinput-rtl.css │ │ │ │ └── jquery.uniform │ │ │ │ │ ├── themes │ │ │ │ │ └── images │ │ │ │ │ │ ├── sprite.png │ │ │ │ │ │ ├── bg-input.png │ │ │ │ │ │ └── bg-input-focus.png │ │ │ │ │ └── .bower.json │ │ │ ├── img │ │ │ │ ├── bg.png │ │ │ │ ├── bg │ │ │ │ │ ├── 1.jpg │ │ │ │ │ ├── 2.jpg │ │ │ │ │ ├── 3.jpg │ │ │ │ │ └── 4.jpg │ │ │ │ ├── logo.jpg │ │ │ │ ├── user.png │ │ │ │ ├── icons.png │ │ │ │ ├── locked.png │ │ │ │ ├── browser.png │ │ │ │ ├── favicon.ico │ │ │ │ ├── progress.png │ │ │ │ ├── success.png │ │ │ │ ├── logo_orign.jpg │ │ │ │ ├── wenku_logo.png │ │ │ │ ├── loading-upload.gif │ │ │ │ ├── profile_small.jpg │ │ │ │ └── sprite-skin-flat.png │ │ │ ├── css │ │ │ │ ├── patterns │ │ │ │ │ ├── logo.jpg │ │ │ │ │ ├── shattered.png │ │ │ │ │ ├── header-logo.png │ │ │ │ │ ├── header-profile.png │ │ │ │ │ ├── header-profile-skin-1.png │ │ │ │ │ └── header-profile-skin-3.png │ │ │ │ ├── plugins │ │ │ │ │ ├── jsTree │ │ │ │ │ │ ├── 32px.png │ │ │ │ │ │ └── throbber.gif │ │ │ │ │ ├── chosen │ │ │ │ │ │ ├── chosen-sprite.png │ │ │ │ │ │ └── chosen-sprite@2x.png │ │ │ │ │ └── cron-generator │ │ │ │ │ │ └── cronGen.css │ │ │ │ └── login.css │ │ │ ├── fonts │ │ │ │ ├── FontAwesome.otf │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ ├── fontawesome-webfont.woff2 │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ └── js │ │ │ │ ├── plugins │ │ │ │ ├── layer │ │ │ │ │ ├── layim │ │ │ │ │ │ ├── loading.gif │ │ │ │ │ │ └── data │ │ │ │ │ │ │ ├── chatlog.json │ │ │ │ │ │ │ ├── groups.json │ │ │ │ │ │ │ └── group.json │ │ │ │ │ ├── skin │ │ │ │ │ │ ├── default │ │ │ │ │ │ │ ├── icon.png │ │ │ │ │ │ │ ├── icon-ext.png │ │ │ │ │ │ │ ├── icon_ext.png │ │ │ │ │ │ │ ├── textbg.png │ │ │ │ │ │ │ ├── loading-0.gif │ │ │ │ │ │ │ ├── loading-1.gif │ │ │ │ │ │ │ ├── loading-2.gif │ │ │ │ │ │ │ ├── xubox_ico0.png │ │ │ │ │ │ │ ├── xubox_title0.png │ │ │ │ │ │ │ ├── xubox_loading0.gif │ │ │ │ │ │ │ ├── xubox_loading1.gif │ │ │ │ │ │ │ ├── xubox_loading2.gif │ │ │ │ │ │ │ └── xubox_loading3.gif │ │ │ │ │ │ ├── moon │ │ │ │ │ │ │ └── default.png │ │ │ │ │ │ └── layer.ext.css │ │ │ │ │ └── laydate │ │ │ │ │ │ └── skins │ │ │ │ │ │ └── default │ │ │ │ │ │ └── icon.png │ │ │ │ ├── bootstrap-table │ │ │ │ │ ├── locale │ │ │ │ │ │ ├── bootstrap-table-zh-CN.min.js │ │ │ │ │ │ └── bootstrap-table-zh-CN.js │ │ │ │ │ └── bootstrap-table-mobile.min.js │ │ │ │ └── validate │ │ │ │ │ └── messages_zh.min.js │ │ │ │ ├── my │ │ │ │ ├── login.js │ │ │ │ ├── quartz-add.js │ │ │ │ ├── quartz-edit.js │ │ │ │ └── user-edit.js │ │ │ │ └── content.js │ │ ├── index.html │ │ ├── Html │ │ │ ├── images │ │ │ │ ├── bg.png │ │ │ │ ├── cn.png │ │ │ │ ├── us.png │ │ │ │ ├── error.png │ │ │ │ ├── content.gif │ │ │ │ ├── favicon.ico │ │ │ │ ├── menu-bg.gif │ │ │ │ ├── shaddow.gif │ │ │ │ ├── menu-item.gif │ │ │ │ └── shaddow-hover.gif │ │ │ ├── css │ │ │ │ └── font │ │ │ │ │ ├── awesome.eot │ │ │ │ │ ├── awesome.otf │ │ │ │ │ ├── awesome.ttf │ │ │ │ │ └── awesome.woff │ │ │ ├── js │ │ │ │ ├── libs │ │ │ │ │ ├── zTree │ │ │ │ │ │ └── img │ │ │ │ │ │ │ ├── job.png │ │ │ │ │ │ │ ├── line.gif │ │ │ │ │ │ │ ├── repo.png │ │ │ │ │ │ │ ├── folder.png │ │ │ │ │ │ │ ├── loading.gif │ │ │ │ │ │ │ ├── trans.png │ │ │ │ │ │ │ ├── zTree.gif │ │ │ │ │ │ │ └── zTree.png │ │ │ │ │ └── url │ │ │ │ │ │ ├── cmg.md5.js │ │ │ │ │ │ ├── cmg.open.url.builder.paipai.js │ │ │ │ │ │ ├── cmg.open.url.builder.tianpin.js │ │ │ │ │ │ ├── cmg.open.url.builder.yihaodian.js │ │ │ │ │ │ ├── cmg.open.url.builder.jd.js │ │ │ │ │ │ ├── cmg.open.url.builder.coo8.js │ │ │ │ │ │ ├── cmg.open.url.builder.ehub.js │ │ │ │ │ │ ├── cmg.open.url.builder.dangdang.js │ │ │ │ │ │ ├── cmg.open.url.builder.amazon.js │ │ │ │ │ │ └── cmg.open.url.builder.taobao.js │ │ │ │ ├── ui.plugin.js │ │ │ │ ├── ui.user.js │ │ │ │ └── messages │ │ │ │ │ ├── message_en_US.properties │ │ │ │ │ └── message_zh_CN.properties │ │ │ └── error.html │ │ └── WEB-INF │ │ │ ├── web.xml │ │ │ └── views │ │ │ └── quartz │ │ │ └── edit.jsp │ └── java │ │ └── com │ │ └── zhaxd │ │ ├── common │ │ ├── exception │ │ │ ├── SeviceException.java │ │ │ └── KettleMasterException.java │ │ ├── kettle │ │ │ └── environment │ │ │ │ └── StartInit.java │ │ └── toolkit │ │ │ └── MD5Utils.java │ │ ├── core │ │ ├── mapper │ │ │ ├── KCategoryDao.java │ │ │ ├── KUserDao.java │ │ │ ├── KQuartzDao.java │ │ │ ├── KJobRecordDao.java │ │ │ ├── KRepositoryDao.java │ │ │ ├── KTransRecordDao.java │ │ │ ├── KRepositoryTypeDao.java │ │ │ ├── KJobDao.java │ │ │ ├── KTransDao.java │ │ │ ├── KJobMonitorDao.java │ │ │ └── KTransMonitorDao.java │ │ ├── dto │ │ │ ├── BootTablePage.java │ │ │ ├── kettle │ │ │ │ └── RepositoryTree.java │ │ │ └── web │ │ │ │ └── KRepositoryDto.java │ │ ├── model │ │ │ ├── KRepositoryType.java │ │ │ ├── KQuartz.java │ │ │ ├── KJobRecord.java │ │ │ ├── KTransRecord.java │ │ │ ├── KUser.java │ │ │ └── KCategory.java │ │ └── conf │ │ │ ├── LoginInterceptor.java │ │ │ └── UTF8StringHttpMessageConverter.java │ │ └── web │ │ ├── utils │ │ ├── DataValidate.java │ │ ├── JsonUtils.java │ │ ├── DateField.java │ │ └── CommonUtils.java │ │ ├── quartz │ │ ├── model │ │ │ └── DBConnectionModel.java │ │ └── QuartzListener.java │ │ ├── controller │ │ ├── JobRecordController.java │ │ ├── TransRecordController.java │ │ ├── JobMonitorController.java │ │ ├── IndexController.java │ │ ├── TransMonitorController.java │ │ ├── QuartzController.java │ │ ├── UserController.java │ │ ├── DownLoadRecordController.java │ │ └── CategoryController.java │ │ └── service │ │ ├── JobRecordService.java │ │ ├── TransRecordService.java │ │ ├── CategoryService.java │ │ └── QuartzService.java └── test │ └── java │ └── com │ └── zhaxd │ └── test │ ├── quartz │ └── QuartzTest.java │ └── string │ └── StringTest.java └── .gitignore /src/main/resources/resource/active.properties: -------------------------------------------------------------------------------- 1 | active.property=DEV -------------------------------------------------------------------------------- /src/main/resources/btsql-ext.properties: -------------------------------------------------------------------------------- 1 | PRODUCT_MODE=true 2 | OFFSET_START_ZERO=true -------------------------------------------------------------------------------- /src/main/webapp/static/lib/jquery-backstretch/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules -------------------------------------------------------------------------------- /src/main/webapp/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/Html/images/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/images/bg.png -------------------------------------------------------------------------------- /src/main/webapp/Html/images/cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/images/cn.png -------------------------------------------------------------------------------- /src/main/webapp/Html/images/us.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/images/us.png -------------------------------------------------------------------------------- /src/main/webapp/static/img/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/img/bg.png -------------------------------------------------------------------------------- /src/main/webapp/static/img/bg/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/img/bg/1.jpg -------------------------------------------------------------------------------- /src/main/webapp/static/img/bg/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/img/bg/2.jpg -------------------------------------------------------------------------------- /src/main/webapp/static/img/bg/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/img/bg/3.jpg -------------------------------------------------------------------------------- /src/main/webapp/static/img/bg/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/img/bg/4.jpg -------------------------------------------------------------------------------- /src/main/webapp/static/img/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/img/logo.jpg -------------------------------------------------------------------------------- /src/main/webapp/static/img/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/img/user.png -------------------------------------------------------------------------------- /src/main/webapp/Html/images/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/images/error.png -------------------------------------------------------------------------------- /src/main/webapp/static/img/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/img/icons.png -------------------------------------------------------------------------------- /src/main/webapp/static/img/locked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/img/locked.png -------------------------------------------------------------------------------- /src/main/webapp/Html/images/content.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/images/content.gif -------------------------------------------------------------------------------- /src/main/webapp/Html/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/images/favicon.ico -------------------------------------------------------------------------------- /src/main/webapp/Html/images/menu-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/images/menu-bg.gif -------------------------------------------------------------------------------- /src/main/webapp/Html/images/shaddow.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/images/shaddow.gif -------------------------------------------------------------------------------- /src/main/webapp/static/img/browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/img/browser.png -------------------------------------------------------------------------------- /src/main/webapp/static/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/img/favicon.ico -------------------------------------------------------------------------------- /src/main/webapp/static/img/progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/img/progress.png -------------------------------------------------------------------------------- /src/main/webapp/static/img/success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/img/success.png -------------------------------------------------------------------------------- /src/main/webapp/Html/css/font/awesome.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/css/font/awesome.eot -------------------------------------------------------------------------------- /src/main/webapp/Html/css/font/awesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/css/font/awesome.otf -------------------------------------------------------------------------------- /src/main/webapp/Html/css/font/awesome.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/css/font/awesome.ttf -------------------------------------------------------------------------------- /src/main/webapp/Html/css/font/awesome.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/css/font/awesome.woff -------------------------------------------------------------------------------- /src/main/webapp/Html/images/menu-item.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/images/menu-item.gif -------------------------------------------------------------------------------- /src/main/webapp/static/img/logo_orign.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/img/logo_orign.jpg -------------------------------------------------------------------------------- /src/main/webapp/static/img/wenku_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/img/wenku_logo.png -------------------------------------------------------------------------------- /src/main/webapp/Html/images/shaddow-hover.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/images/shaddow-hover.gif -------------------------------------------------------------------------------- /src/main/webapp/static/css/patterns/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/css/patterns/logo.jpg -------------------------------------------------------------------------------- /src/main/webapp/static/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /src/main/webapp/static/img/loading-upload.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/img/loading-upload.gif -------------------------------------------------------------------------------- /src/main/webapp/static/img/profile_small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/img/profile_small.jpg -------------------------------------------------------------------------------- /src/main/webapp/Html/js/libs/zTree/img/job.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/js/libs/zTree/img/job.png -------------------------------------------------------------------------------- /src/main/webapp/Html/js/libs/zTree/img/line.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/js/libs/zTree/img/line.gif -------------------------------------------------------------------------------- /src/main/webapp/Html/js/libs/zTree/img/repo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/js/libs/zTree/img/repo.png -------------------------------------------------------------------------------- /src/main/webapp/static/img/sprite-skin-flat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/img/sprite-skin-flat.png -------------------------------------------------------------------------------- /src/main/webapp/Html/js/libs/zTree/img/folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/js/libs/zTree/img/folder.png -------------------------------------------------------------------------------- /src/main/webapp/Html/js/libs/zTree/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/js/libs/zTree/img/loading.gif -------------------------------------------------------------------------------- /src/main/webapp/Html/js/libs/zTree/img/trans.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/js/libs/zTree/img/trans.png -------------------------------------------------------------------------------- /src/main/webapp/Html/js/libs/zTree/img/zTree.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/js/libs/zTree/img/zTree.gif -------------------------------------------------------------------------------- /src/main/webapp/Html/js/libs/zTree/img/zTree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/Html/js/libs/zTree/img/zTree.png -------------------------------------------------------------------------------- /src/main/webapp/static/css/patterns/shattered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/css/patterns/shattered.png -------------------------------------------------------------------------------- /src/main/webapp/static/css/plugins/jsTree/32px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/css/plugins/jsTree/32px.png -------------------------------------------------------------------------------- /src/main/webapp/static/lib/metronic/img/dash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/lib/metronic/img/dash.jpg -------------------------------------------------------------------------------- /src/main/webapp/static/css/patterns/header-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/css/patterns/header-logo.png -------------------------------------------------------------------------------- /src/main/webapp/static/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/main/webapp/static/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/main/webapp/static/lib/metronic/img/bg-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/lib/metronic/img/bg-white.png -------------------------------------------------------------------------------- /src/main/webapp/static/css/patterns/header-profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/css/patterns/header-profile.png -------------------------------------------------------------------------------- /src/main/webapp/static/css/plugins/jsTree/throbber.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/css/plugins/jsTree/throbber.gif -------------------------------------------------------------------------------- /src/main/webapp/static/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/main/webapp/static/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /src/main/webapp/static/lib/metronic/img/bg-opacity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/lib/metronic/img/bg-opacity.png -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/layim/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/js/plugins/layer/layim/loading.gif -------------------------------------------------------------------------------- /src/main/webapp/static/lib/metronic/img/bg-white-lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/lib/metronic/img/bg-white-lock.png -------------------------------------------------------------------------------- /src/main/webapp/static/css/plugins/chosen/chosen-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/css/plugins/chosen/chosen-sprite.png -------------------------------------------------------------------------------- /src/main/webapp/static/lib/metronic/img/syncfusion-icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/lib/metronic/img/syncfusion-icons.png -------------------------------------------------------------------------------- /src/main/webapp/static/css/patterns/header-profile-skin-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/css/patterns/header-profile-skin-1.png -------------------------------------------------------------------------------- /src/main/webapp/static/css/patterns/header-profile-skin-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/css/patterns/header-profile-skin-3.png -------------------------------------------------------------------------------- /src/main/webapp/static/css/plugins/chosen/chosen-sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/css/plugins/chosen/chosen-sprite@2x.png -------------------------------------------------------------------------------- /src/main/webapp/static/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/main/webapp/static/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/main/webapp/static/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/skin/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/js/plugins/layer/skin/default/icon.png -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/skin/moon/default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/js/plugins/layer/skin/moon/default.png -------------------------------------------------------------------------------- /src/main/webapp/static/lib/bootstrap-fileinput/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/lib/bootstrap-fileinput/img/loading.gif -------------------------------------------------------------------------------- /src/main/webapp/static/lib/metronic/img/remove-icon-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/lib/metronic/img/remove-icon-small.png -------------------------------------------------------------------------------- /src/main/webapp/static/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/skin/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/js/plugins/layer/skin/default/icon-ext.png -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/skin/default/icon_ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/js/plugins/layer/skin/default/icon_ext.png -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/skin/default/textbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/js/plugins/layer/skin/default/textbg.png -------------------------------------------------------------------------------- /src/main/webapp/static/lib/bootstrap-fileinput/img/loading-sm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/lib/bootstrap-fileinput/img/loading-sm.gif -------------------------------------------------------------------------------- /src/main/webapp/static/lib/metronic/img/inbox-nav-arrow-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/lib/metronic/img/inbox-nav-arrow-blue.png -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/skin/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/js/plugins/layer/skin/default/loading-0.gif -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/skin/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/js/plugins/layer/skin/default/loading-1.gif -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/skin/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/js/plugins/layer/skin/default/loading-2.gif -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/skin/default/xubox_ico0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/js/plugins/layer/skin/default/xubox_ico0.png -------------------------------------------------------------------------------- /src/main/webapp/static/lib/jquery.uniform/themes/images/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/lib/jquery.uniform/themes/images/sprite.png -------------------------------------------------------------------------------- /src/main/webapp/static/lib/metronic/img/syncfusion-icons-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/lib/metronic/img/syncfusion-icons-white.png -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/laydate/skins/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/js/plugins/layer/laydate/skins/default/icon.png -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/skin/default/xubox_title0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/js/plugins/layer/skin/default/xubox_title0.png -------------------------------------------------------------------------------- /src/main/webapp/static/lib/jquery.uniform/themes/images/bg-input.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/lib/jquery.uniform/themes/images/bg-input.png -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/skin/default/xubox_loading0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/js/plugins/layer/skin/default/xubox_loading0.gif -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/skin/default/xubox_loading1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/js/plugins/layer/skin/default/xubox_loading1.gif -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/skin/default/xubox_loading2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/js/plugins/layer/skin/default/xubox_loading2.gif -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/skin/default/xubox_loading3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/js/plugins/layer/skin/default/xubox_loading3.gif -------------------------------------------------------------------------------- /src/main/webapp/static/lib/jquery.uniform/themes/images/bg-input-focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/lib/jquery.uniform/themes/images/bg-input-focus.png -------------------------------------------------------------------------------- /src/main/webapp/static/lib/metronic/fonts/v10/uYKcPVoh6c5R0NpdEY5A-Q.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/lib/metronic/fonts/v10/uYKcPVoh6c5R0NpdEY5A-Q.woff -------------------------------------------------------------------------------- /src/main/webapp/static/css/plugins/cron-generator/cronGen.css: -------------------------------------------------------------------------------- 1 | .line { 2 | height: 25px; 3 | line-height: 20px; 4 | margin: 3px; 5 | } 6 | .imp { 7 | padding-left: 25px; 8 | } 9 | #CronGenTabs li a{ 10 | padding: 10px 15px; 11 | } -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/common/exception/SeviceException.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.common.exception; 2 | 3 | public class SeviceException extends Exception{ 4 | 5 | private static final long serialVersionUID = 1L; 6 | 7 | 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/main/webapp/static/lib/metronic/fonts/v10/DXI1ORHCpsQm3Vp6mXoaTRsxEYwM7FgeyaSgU71cLG0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/lib/metronic/fonts/v10/DXI1ORHCpsQm3Vp6mXoaTRsxEYwM7FgeyaSgU71cLG0.woff -------------------------------------------------------------------------------- /src/main/webapp/static/lib/metronic/fonts/v10/MTP_ySUJH_bn48VBG8sNShsxEYwM7FgeyaSgU71cLG0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/lib/metronic/fonts/v10/MTP_ySUJH_bn48VBG8sNShsxEYwM7FgeyaSgU71cLG0.woff -------------------------------------------------------------------------------- /src/main/webapp/static/lib/metronic/fonts/v10/k3k702ZOKiLJc3WVjuplzBsxEYwM7FgeyaSgU71cLG0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaxiaodong9860/kettle-scheduler/HEAD/src/main/webapp/static/lib/metronic/fonts/v10/k3k702ZOKiLJc3WVjuplzBsxEYwM7FgeyaSgU71cLG0.woff -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/mapper/KCategoryDao.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.mapper; 2 | 3 | import com.zhaxd.core.model.KCategory; 4 | import org.beetl.sql.core.mapper.BaseMapper; 5 | 6 | public interface KCategoryDao extends BaseMapper { 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/mapper/KUserDao.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.mapper; 2 | 3 | import org.beetl.sql.core.mapper.BaseMapper; 4 | 5 | import com.zhaxd.core.model.*; 6 | 7 | 8 | public interface KUserDao extends BaseMapper { 9 | 10 | } -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/mapper/KQuartzDao.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.mapper; 2 | 3 | import org.beetl.sql.core.mapper.BaseMapper; 4 | 5 | import com.zhaxd.core.model.*; 6 | 7 | 8 | public interface KQuartzDao extends BaseMapper { 9 | 10 | } -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/mapper/KJobRecordDao.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.mapper; 2 | 3 | import org.beetl.sql.core.mapper.BaseMapper; 4 | 5 | import com.zhaxd.core.model.*; 6 | 7 | 8 | public interface KJobRecordDao extends BaseMapper { 9 | 10 | } -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/mapper/KRepositoryDao.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.mapper; 2 | 3 | import org.beetl.sql.core.mapper.BaseMapper; 4 | 5 | import com.zhaxd.core.model.*; 6 | 7 | 8 | public interface KRepositoryDao extends BaseMapper { 9 | 10 | } -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/mapper/KTransRecordDao.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.mapper; 2 | 3 | import org.beetl.sql.core.mapper.BaseMapper; 4 | 5 | import com.zhaxd.core.model.*; 6 | 7 | 8 | public interface KTransRecordDao extends BaseMapper { 9 | 10 | } -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/mapper/KRepositoryTypeDao.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.mapper; 2 | 3 | import org.beetl.sql.core.mapper.BaseMapper; 4 | 5 | import com.zhaxd.core.model.*; 6 | 7 | 8 | public interface KRepositoryTypeDao extends BaseMapper { 9 | 10 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled class file 2 | *.class 3 | 4 | # Log file 5 | *.log 6 | 7 | # BlueJ files 8 | *.ctxt 9 | 10 | # Mobile Tools for Java (J2ME) 11 | .mtj.tmp/ 12 | 13 | # Package Files # 14 | *.jar 15 | *.war 16 | *.ear 17 | *.zip 18 | *.tar.gz 19 | *.rar 20 | 21 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 22 | hs_err_pid* 23 | -------------------------------------------------------------------------------- /src/main/resources/kettle-lifecycle-listeners.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | PDI-OSGI-Bridge Listener 5 | 6 | org.pentaho.di.osgi.KettleLifeCycleAdapter 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/main/resources/kettle-registry-extensions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | PDI-OSGI-Bridge Extension 5 | 6 | org.pentaho.di.osgi.registryExtension.OSGIPluginRegistryExtension 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/common/kettle/environment/StartInit.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.common.kettle.environment; 2 | 3 | import org.springframework.beans.factory.InitializingBean; 4 | 5 | public class StartInit implements InitializingBean{ 6 | 7 | @Override 8 | public void afterPropertiesSet() throws Exception { 9 | //初始化环境*** 10 | // com.zhaxd.common.kettle.environment.KettleInit.init(); 11 | com.zhaxd.common.kettle.environment.KettleInit.environmentInit(); 12 | org.pentaho.di.core.KettleEnvironment.init(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/mapper/KJobDao.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.mapper; 2 | 3 | import com.zhaxd.core.model.KJob; 4 | import org.beetl.sql.core.annotatoin.SqlStatement; 5 | import org.beetl.sql.core.mapper.BaseMapper; 6 | 7 | import java.util.List; 8 | 9 | 10 | public interface KJobDao extends BaseMapper { 11 | @SqlStatement(params = "kJob,start,size") 12 | List pageQuery(KJob kJob, Integer start, Integer size); 13 | 14 | @SqlStatement(params = "kJob") 15 | List queryByCondition(KJob kJob); 16 | 17 | @SqlStatement(params = "kJob") 18 | Long allCount(KJob kJob); 19 | } -------------------------------------------------------------------------------- /src/main/webapp/Html/error.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 22 | 23 | 24 |
25 |
26 |
27 | 28 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/mapper/KTransDao.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.mapper; 2 | 3 | import org.beetl.sql.core.annotatoin.SqlStatement; 4 | import org.beetl.sql.core.mapper.BaseMapper; 5 | 6 | import com.zhaxd.core.model.*; 7 | 8 | import java.util.List; 9 | 10 | 11 | public interface KTransDao extends BaseMapper { 12 | @SqlStatement(params = "kTrans,start,size") 13 | List pageQuery(KTrans kTrans, Integer start, Integer size); 14 | 15 | @SqlStatement(params = "kTrans") 16 | List queryByCondition(KTrans kTrans); 17 | 18 | @SqlStatement(params = "kTrans") 19 | Long allCount(KTrans kTrans); 20 | } -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/mapper/KJobMonitorDao.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.mapper; 2 | 3 | import org.beetl.sql.core.annotatoin.SqlStatement; 4 | import org.beetl.sql.core.mapper.BaseMapper; 5 | 6 | import com.zhaxd.core.model.*; 7 | 8 | import java.util.List; 9 | 10 | 11 | public interface KJobMonitorDao extends BaseMapper { 12 | @SqlStatement(params = "kJobMonitor,start,size,categoryId") 13 | List pageQuery(KJobMonitor kJobMonitor, Integer start, Integer size, Integer categoryId); 14 | 15 | @SqlStatement(params = "kJobMonitor,categoryId") 16 | Long allCount(KJobMonitor kJobMonitor, Integer categoryId); 17 | } -------------------------------------------------------------------------------- /src/main/webapp/Html/js/ui.plugin.js: -------------------------------------------------------------------------------- 1 | var plugin = {}; 2 | 3 | plugin.locale = function(language){ 4 | $.i18n.init({ 5 | name:'message', 6 | path:ctx+'/Html/js/messages/', 7 | language: language, 8 | mode:'map', 9 | encoding: 'UTF-8', 10 | callback: function() { 11 | } 12 | }); 13 | }; 14 | plugin.isWidthChar = function(val) { 15 | var pattern = /^[a-zA-Z]([a-zA-Z0-9]|[_]){6,64}$/; 16 | return pattern.exec(val); 17 | }; 18 | plugin.language = function(val) { 19 | $.post(ctx+"/Locale?language="+val+"&url="+location.href, function(data) {}); 20 | window.location.reload(); 21 | }; 22 | $(function(){ 23 | plugin.locale(language); 24 | }); -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/mapper/KTransMonitorDao.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.mapper; 2 | 3 | import org.beetl.sql.core.annotatoin.SqlStatement; 4 | import org.beetl.sql.core.mapper.BaseMapper; 5 | 6 | import com.zhaxd.core.model.*; 7 | 8 | import java.util.List; 9 | 10 | 11 | public interface KTransMonitorDao extends BaseMapper { 12 | @SqlStatement(params = "kTransMonitor,start,size,categoryId") 13 | List pageQuery(KTransMonitor kTransMonitor, Integer start, Integer size, Integer categoryId); 14 | 15 | @SqlStatement(params = "kTransMonitor,categoryId") 16 | Long allCount(KTransMonitor kTransMonitor, Integer categoryId); 17 | } -------------------------------------------------------------------------------- /src/main/resources/resource/db-DEV.properties: -------------------------------------------------------------------------------- 1 | #\u672C\u5730\u6570\u636E\u6E90\u914D\u7F6E(MySql) 2 | #datasource.type=mysql 3 | #beetl.db.style=org.beetl.sql.core.db.MySqlStyle 4 | #jdbc.driver=com.mysql.jdbc.Driver 5 | #jdbc.url=jdbc:mysql://localhost:3306/kettle-scheduler?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false 6 | #jdbc.username=root 7 | #jdbc.password=root123 8 | 9 | #\u672C\u5730\u6570\u636E\u6E90\u914D\u7F6E(Oracle) 10 | datasource.type=oracle 11 | beetl.db.style=org.beetl.sql.core.db.OracleStyle 12 | jdbc.driver=oracle.jdbc.OracleDriver 13 | jdbc.url=jdbc:oracle:thin:@10.10.10.62:1521:zhcs 14 | jdbc.username=testuser 15 | jdbc.password=123456 -------------------------------------------------------------------------------- /src/main/resources/resource/db-PROD.properties: -------------------------------------------------------------------------------- 1 | #\u672C\u5730\u6570\u636E\u6E90\u914D\u7F6E(MySql) 2 | #datasource.type=mysql 3 | #beetl.db.style=org.beetl.sql.core.db.MySqlStyle 4 | #jdbc.driver=com.mysql.jdbc.Driver 5 | #jdbc.url=jdbc:mysql://localhost:3306/kettle-scheduler?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false 6 | #jdbc.username=root 7 | #jdbc.password=root123 8 | 9 | #\u672C\u5730\u6570\u636E\u6E90\u914D\u7F6E(Oracle) 10 | datasource.type=oracle 11 | beetl.db.style=org.beetl.sql.core.db.OracleStyle 12 | jdbc.driver=oracle.jdbc.OracleDriver 13 | jdbc.url=jdbc:oracle:thin:@10.10.10.10:1521:orcl 14 | jdbc.username=test 15 | jdbc.password=123456 -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/dto/BootTablePage.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.dto; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * BootstrapTable表格规定 7 | * 返回数据格式 8 | */ 9 | public class BootTablePage { 10 | 11 | //总数量 12 | private long total; 13 | //每一页的数据 14 | private List rows; 15 | 16 | public BootTablePage() { 17 | } 18 | public BootTablePage(long total, List rows) { 19 | super(); 20 | this.total = total; 21 | this.rows = rows; 22 | } 23 | 24 | public long getTotal() { 25 | return total; 26 | } 27 | public void setTotal(long total) { 28 | this.total = total; 29 | } 30 | public List getRows() { 31 | return rows; 32 | } 33 | public void setRows(List rows) { 34 | this.rows = rows; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/resources/spring/applicationContext-service.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/resources/quartz.properties: -------------------------------------------------------------------------------- 1 | # Default Properties file for use by StdSchedulerFactory 2 | # to create a Quartz Scheduler Instance, if a different 3 | # properties file is not explicitly specified. 4 | # 5 | 6 | org.quartz.scheduler.instanceName: DefaultQuartzScheduler 7 | org.quartz.scheduler.rmi.export: false 8 | org.quartz.scheduler.rmi.proxy: false 9 | org.quartz.scheduler.wrapJobExecutionInUserTransaction: false 10 | 11 | org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool 12 | org.quartz.threadPool.threadCount: 50 13 | org.quartz.threadPool.threadPriority: 5 14 | org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true 15 | 16 | org.quartz.jobStore.misfireThreshold: 60000 17 | 18 | org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore 19 | 20 | -------------------------------------------------------------------------------- /src/main/webapp/Html/js/ui.user.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | $("#iUser").click(function() { 3 | var name = $.trim($("#name").val()); 4 | if (!name) { 5 | alert($.i18n.get('org.ukettle.iQuartz.Verify.User.Name')); 6 | return false; 7 | } 8 | var reg = /^(?:[a-z\d]+[_\-\+\.]?)*[a-z\d]+@(?:([a-z\d]+\-?)*[a-z\d]+\.)+([a-z]{2,})+$/i; 9 | var email = $.trim($("#email").val()); 10 | if(!reg.test(email)){ 11 | alert($.i18n.get('org.ukettle.iQuartz.Verify.User.Email')); 12 | return false; 13 | } 14 | var password = $.trim($("#password").val()); 15 | var password1 = $.trim($("#password1").val()); 16 | if (!password || !password1 || password != password1) { 17 | alert($.i18n.get('org.ukettle.iQuartz.Verify.User.Password')); 18 | return false; 19 | } 20 | $('#formId').submit(); 21 | }); 22 | }); -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/layim/data/chatlog.json: -------------------------------------------------------------------------------- 1 | { 2 | "status": 1, 3 | "msg": "ok", 4 | "data": [ 5 | { 6 | "id": "100001", 7 | "name": "Beaut-zihan", 8 | "time": "10:23", 9 | "face": "img/a1.jpg" 10 | }, 11 | { 12 | "id": "100002", 13 | "name": "慕容晓晓", 14 | "time": "昨天", 15 | "face": "img/a2.jpg" 16 | }, 17 | { 18 | "id": "1000033", 19 | "name": "乔峰", 20 | "time": "2014-4.22", 21 | "face": "img/a3.jpg" 22 | }, 23 | { 24 | "id": "10000333", 25 | "name": "高圆圆", 26 | "time": "2014-4.21", 27 | "face": "img/a4.jpg" 28 | } 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * bootstrap-table - v1.9.0 - 2015-09-30 3 | * https://github.com/wenzhixin/bootstrap-table 4 | * Copyright (c) 2015 zhixin wen 5 | * Licensed MIT License 6 | */ 7 | !function(a){"use strict";a.fn.bootstrapTable.locales["zh-CN"]={formatLoadingMessage:function(){return"正在努力地加载数据中,请稍候……"},formatRecordsPerPage:function(a){return"每页显示 "+a+" 条记录"},formatShowingRows:function(a,b,c){return"显示第 "+a+" 到第 "+b+" 条记录,总共 "+c+" 条记录"},formatSearch:function(){return"搜索"},formatNoMatches:function(){return"没有找到匹配的记录"},formatPaginationSwitch:function(){return"隐藏/显示分页"},formatRefresh:function(){return"刷新"},formatToggle:function(){return"切换"},formatColumns:function(){return"列"}},a.extend(a.fn.bootstrapTable.defaults,a.fn.bootstrapTable.locales["zh-CN"])}(jQuery); 8 | -------------------------------------------------------------------------------- /src/test/java/com/zhaxd/test/quartz/QuartzTest.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.test.quartz; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | import org.junit.Test; 7 | 8 | import com.zhaxd.web.quartz.QuartzManager; 9 | import com.zhaxd.web.quartz.TransQuartz; 10 | 11 | public class QuartzTest { 12 | 13 | @Test 14 | public void AddJobTest(){ 15 | 16 | 17 | 18 | 19 | String cron = "*/5 * * * * ?"; 20 | Map parameter = new HashMap(); 21 | QuartzManager.addJob("work1", "/", "qqq1111", "aaa", TransQuartz.class, cron, parameter); 22 | } 23 | 24 | 25 | 26 | public static void main(String[] args){ 27 | Map parameter = new HashMap(); 28 | QuartzManager.addOnceJob("aaa", "aaaaaaaaaa", "qqq1111", "aaa", TransQuartz.class, parameter); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/webapp/Html/js/libs/url/cmg.md5.js: -------------------------------------------------------------------------------- 1 | var MessageDigest = java.security.MessageDigest; 2 | var StringBuffer = java.lang.StringBuffer; 3 | var Integer = java.lang.Integer; 4 | 5 | 6 | function CMGMD5(){} 7 | 8 | CMGMD5.prototype.encrypt = function (strSource) { 9 | var algorithm = MessageDigest.getInstance("MD5"); 10 | 11 | // get the input as bytes 12 | var bytes = new java.lang.String(strSource).getBytes("UTF-8"); 13 | 14 | // calculate the digest 15 | algorithm.reset(); 16 | algorithm.update(bytes); 17 | var md5Digest = algorithm.digest(); 18 | 19 | // turn the digest into a hex-string representation 20 | var hexString = new StringBuffer(); 21 | 22 | for (var i = 0; i < md5Digest.length; i++){ 23 | var hex = Integer.toHexString(md5Digest[i] & 0XFF); 24 | if (hex.length() == 1){ 25 | hexString.append('0').append(""); 26 | } 27 | hexString.append(hex); 28 | } 29 | 30 | // write output value 31 | return hexString.toString(); 32 | } -------------------------------------------------------------------------------- /src/main/webapp/static/lib/metronic/fonts/font.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Open Sans'; 3 | font-style: normal; 4 | font-weight: 300; 5 | src: local('Open Sans Light'), local('OpenSans-Light'), url(v10/DXI1ORHCpsQm3Vp6mXoaTRsxEYwM7FgeyaSgU71cLG0.woff) format('woff'); 6 | } 7 | @font-face { 8 | font-family: 'Open Sans'; 9 | font-style: normal; 10 | font-weight: 400; 11 | src: local('Open Sans'), local('OpenSans'), url(v10/uYKcPVoh6c5R0NpdEY5A-Q.woff) format('woff'); 12 | } 13 | @font-face { 14 | font-family: 'Open Sans'; 15 | font-style: normal; 16 | font-weight: 600; 17 | src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(v10/MTP_ySUJH_bn48VBG8sNShsxEYwM7FgeyaSgU71cLG0.woff) format('woff'); 18 | } 19 | @font-face { 20 | font-family: 'Open Sans'; 21 | font-style: normal; 22 | font-weight: 700; 23 | src: local('Open Sans Bold'), local('OpenSans-Bold'), url(v10/k3k702ZOKiLJc3WVjuplzBsxEYwM7FgeyaSgU71cLG0.woff) format('woff'); 24 | } -------------------------------------------------------------------------------- /src/main/webapp/static/lib/jquery-backstretch/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-backstretch", 3 | "description": "A simple jQuery plugin that allows you to add a dynamically-resized, slideshow-capable background image to any page or element.", 4 | "version": "2.0.4", 5 | "homepage": "http://srobbin.com/jquery-plugins/backstretch/", 6 | "author": { 7 | "name": "Scott Robbin", 8 | "email": "scott@robbin.co", 9 | "url": "http://srobbin.com" 10 | }, 11 | "main": [ 12 | "jquery.backstretch.js" 13 | ], 14 | "dependencies": { 15 | "jquery": "~1.9.1" 16 | }, 17 | "repository": { 18 | "type": "git", 19 | "url": "git://github.com/srobbin/jquery-backstretch.git" 20 | }, 21 | "_release": "2.0.4", 22 | "_resolution": { 23 | "type": "version", 24 | "tag": "2.0.4", 25 | "commit": "b9a96f872e535f1e31fa7868be14940d0e00271f" 26 | }, 27 | "_source": "https://github.com/srobbin/jquery-backstretch.git", 28 | "_target": "^2.0.4", 29 | "_originalSource": "jquery-backstretch" 30 | } -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/model/KRepositoryType.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.model; 2 | 3 | import org.beetl.sql.core.annotatoin.SeqID; 4 | 5 | public class KRepositoryType { 6 | @SeqID(name="REPOSITORY_TYPE_ID_SEQ") 7 | private Integer repositoryTypeId ; 8 | private String repositoryTypeCode ; 9 | private String repositoryTypeDes ; 10 | 11 | public KRepositoryType() { 12 | } 13 | 14 | public Integer getRepositoryTypeId(){ 15 | return repositoryTypeId; 16 | } 17 | public void setRepositoryTypeId(Integer repositoryTypeId ){ 18 | this.repositoryTypeId = repositoryTypeId; 19 | } 20 | 21 | public String getRepositoryTypeCode(){ 22 | return repositoryTypeCode; 23 | } 24 | public void setRepositoryTypeCode(String repositoryTypeCode ){ 25 | this.repositoryTypeCode = repositoryTypeCode; 26 | } 27 | 28 | public String getRepositoryTypeDes(){ 29 | return repositoryTypeDes; 30 | } 31 | public void setRepositoryTypeDes(String repositoryTypeDes ){ 32 | this.repositoryTypeDes = repositoryTypeDes; 33 | } 34 | 35 | } -------------------------------------------------------------------------------- /src/main/resources/resource/kettle_PROD.properties: -------------------------------------------------------------------------------- 1 | #********************************************************************** 2 | # Kettle Properties 3 | #\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u7528\u4E8E\u521D\u59CB\u5316kettle\u73AF\u5883\u53D8\u91CF\uFF08.kettle/kettle.properties\u6240\u5728\u8DEF\u5F84\uFF09,\u6307\u5411kettle\u6839\u76EE\u5F55\uFF08\u4F8B\u5982 D:\data-integration\uFF09 4 | kettle.home=/usr/local/data-integration 5 | #\u7EDD\u5BF9\u8DEF\u5F84kettle\u4E0Bplugins\u6587\u4EF6 6 | kettle.plugin=/usr/local/apache-tomcat-8.5.39/bin/plugins 7 | #\u76F8\u5BF9\u8DEF\u5F84\uFF0C\u4E0D\u9700\u8981\u6539\uFF0C\u6682\u65F6\u6CA1\u6709\u67E5\u51FA\u6709\u4EC0\u4E48\u7528 8 | kettle.script=Html/js/libs/url 9 | #\u65E5\u5FD7\u7EA7\u522B 10 | kettle.loglevel=detail 11 | #kettle\u65E5\u5FD7\u5B58\u653E\u8DEF\u5F84 12 | kettle.log.file.path=/usr/local/data-integration/logs 13 | #\u4FDD\u5B58\u4E0A\u4F20\u6587\u4EF6\u8F6C\u6362(.ktr)\u6216\u4F5C\u4E1A(.kjb)\u7684\u8DEF\u5F84,\u6B64\u529F\u80FD\u672A\u8C03\u8BD5,\u6682\u65F6\u505C\u7528,\u5F85\u5F00\u53D1 14 | kettle.file.repository=/usr/local/data-integration/test -------------------------------------------------------------------------------- /src/main/resources/resource/kettle-DEV.properties: -------------------------------------------------------------------------------- 1 | #********************************************************************** 2 | # Kettle Properties 3 | #\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u7528\u4E8E\u521D\u59CB\u5316kettle\u73AF\u5883\u53D8\u91CF\uFF08.kettle/kettle.properties\u6240\u5728\u8DEF\u5F84\uFF09,\u6307\u5411kettle\u6839\u76EE\u5F55\uFF08\u4F8B\u5982 D:\data-integration\uFF09 4 | kettle.home=D:\\Tools\\data-integration 5 | #\u7EDD\u5BF9\u8DEF\u5F84kettle\u4E0Bplugins\u6587\u4EF6 6 | kettle.plugin=D:\\Tools\\apache-tomcat-9.0.0.M18\\bin\\plugins 7 | #\u76F8\u5BF9\u8DEF\u5F84\uFF0C\u4E0D\u9700\u8981\u6539\uFF0C\u6682\u65F6\u6CA1\u6709\u67E5\u51FA\u6709\u4EC0\u4E48\u7528 8 | kettle.script=Html\\js\\libs\\url 9 | #\u65E5\u5FD7\u7EA7\u522B 10 | kettle.loglevel=detail 11 | #kettle\u65E5\u5FD7\u5B58\u653E\u8DEF\u5F84 12 | kettle.log.file.path=D:\\Tools\\data-integration\\logs 13 | #\u4FDD\u5B58\u4E0A\u4F20\u6587\u4EF6\u8F6C\u6362(.ktr)\u6216\u4F5C\u4E1A(.kjb)\u7684\u8DEF\u5F84,\u6B64\u529F\u80FD\u672A\u8C03\u8BD5,\u6682\u65F6\u505C\u7528,\u5F85\u5F00\u53D1 14 | kettle.file.repository=D:\\Tools\\data-integration\\test -------------------------------------------------------------------------------- /src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | ***********************log4j.properties*********************** 2 | log4j.rootLogger=info, stdout, root, error 3 | 4 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 5 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 6 | log4j.appender.stdout.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r(%C:%M) - %m%n 7 | 8 | log4j.appender.root=org.apache.log4j.RollingFileAppender 9 | log4j.appender.root.File= ${catalina.base}/logs/kettle_log.log 10 | log4j.appender.root.MaxFileSize=512KB 11 | log4j.appender.root.MaxBackupIndex=5 12 | log4j.appender.root.encoding=UTF-8 13 | log4j.appender.root.layout=org.apache.log4j.PatternLayout 14 | log4j.appender.root.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r(%C:%M) - %m%n 15 | 16 | log4j.appender.error=org.apache.log4j.RollingFileAppender 17 | log4j.appender.error.File= ${catalina.base}/logs/error_log.log 18 | log4j.appender.error.MaxFileSize=512KB 19 | log4j.appender.error.MaxBackupIndex=5 20 | log4j.appender.error.encoding=UTF-8 21 | log4j.appender.error.Threshold = ERROR 22 | log4j.appender.error.append=true 23 | log4j.appender.error.layout=org.apache.log4j.PatternLayout 24 | log4j.appender.error.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r(%C:%M) - %m%n -------------------------------------------------------------------------------- /src/main/webapp/static/lib/jquery.uniform/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery.uniform", 3 | "description": "A jQuery plugin to make your form controls look how you want them to. Now with HTML-5 attributes!", 4 | "homepage": "http://opensource.audith.org/uniform", 5 | "main": [ 6 | "lib/jquery.uniform.js" 7 | ], 8 | "dependencies": { 9 | "jquery": "^1.6" 10 | }, 11 | "moduleType": [ 12 | "globals" 13 | ], 14 | "keywords": [ 15 | "motion", 16 | "physics", 17 | "particles" 18 | ], 19 | "authors": [ 20 | "Shahriyar Imanov ", 21 | "Josh Pyles ", 22 | "Tyler Akins " 23 | ], 24 | "license": "MIT", 25 | "repository": { 26 | "type": "git", 27 | "url": "https://github.com/AudithSoftworks/Uniform" 28 | }, 29 | "ignore": [ 30 | "**/.*", 31 | "node_modules", 32 | "bower_components", 33 | "www", 34 | "www-fragments" 35 | ], 36 | "version": "2.2.2", 37 | "_release": "2.2.2", 38 | "_resolution": { 39 | "type": "version", 40 | "tag": "v2.2.2", 41 | "commit": "a613cbb325d067296e14a9eaee2e409b7f20b8e3" 42 | }, 43 | "_source": "https://github.com/AudithSoftworks/Uniform.git", 44 | "_target": "^2.2.2", 45 | "_originalSource": "jquery.uniform" 46 | } -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/validate/messages_zh.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery Validation Plugin - v1.13.1 - 10/14/2014 2 | * http://jqueryvalidation.org/ 3 | * Copyright (c) 2014 Jörn Zaefferer; Licensed MIT */ 4 | ! function (a) { 5 | "function" == typeof define && define.amd ? define(["jquery", "jquery.validate.min"], a) : a(jQuery) 6 | }(function (a) { 7 | var icon = " "; 8 | a.extend(a.validator.messages, { 9 | required: icon + "必填", 10 | remote: icon + "请修正此栏位", 11 | email: icon + "请输入有效的电子邮件", 12 | url: icon + "请输入有效的网址", 13 | date: icon + "请输入有效的日期", 14 | dateISO: icon + "请输入有效的日期 (YYYY-MM-DD)", 15 | number: icon + "请输入正确的数字", 16 | digits: icon + "只能输入数字", 17 | creditcard: icon + "请输入有效的信用卡号码", 18 | equalTo: icon + "你的输入不相同", 19 | extension: icon + "请输入有效的后缀", 20 | maxlength: a.validator.format(icon + "最多 {0} 个字"), 21 | minlength: a.validator.format(icon + "最少 {0} 个字"), 22 | rangelength: a.validator.format(icon + "请输入长度为 {0} 至 {1} 之间的字串"), 23 | range: a.validator.format(icon + "请输入 {0} 至 {1} 之间的数值"), 24 | max: a.validator.format(icon + "请输入不大于 {0} 的数值"), 25 | min: a.validator.format(icon + "请输入不小于 {0} 的数值") 26 | }) 27 | }); 28 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/utils/DataValidate.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.utils; 2 | 3 | import java.lang.reflect.InvocationTargetException; 4 | import java.util.ArrayList; 5 | import java.util.List; 6 | import java.util.Map; 7 | 8 | import org.apache.commons.beanutils.BeanUtils; 9 | import org.apache.commons.collections.CollectionUtils; 10 | import org.springframework.util.ObjectUtils; 11 | 12 | import com.zhaxd.core.dto.web.KRepositoryDto; 13 | 14 | public class DataValidate { 15 | 16 | /** 17 | * @Title AllNotEmpty 18 | * @Description 实体类参数校验(写这个方法的时候我的内心是崩溃的) 19 | * @param object 实体类 20 | * @return 21 | * @return boolean 22 | */ 23 | public static boolean AllNotEmpty(Object object){ 24 | List returnList = new ArrayList<>(); 25 | try { 26 | Map describe = BeanUtils.describe(object); 27 | describe.forEach((k, v) -> { 28 | if (ObjectUtils.isEmpty(v)){ 29 | returnList.add(v); 30 | } 31 | }); 32 | } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { 33 | e.printStackTrace(); 34 | } 35 | return CollectionUtils.isEmpty(returnList); 36 | } 37 | 38 | public static void main(String[] args){ 39 | KRepositoryDto kRepositoryDto = new KRepositoryDto(); 40 | System.out.println(DataValidate.AllNotEmpty(kRepositoryDto)); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/resources/sql/mysql/kJob.md: -------------------------------------------------------------------------------- 1 | pageQuery 2 | === 3 | *数据库表分页查询 4 | SELECT #use("cols")# FROM 5 | k_job 6 | #use("condition")# 7 | #use("sort")# 8 | #use("limit")# 9 | 10 | queryByCondition 11 | === 12 | SELECT job_Id FROM k_job #use("condition")# 13 | 14 | cols 15 | === 16 | *列名 17 | job_Id, 18 | category_Id, 19 | job_Name, 20 | job_Description, 21 | job_Path, 22 | job_Quartz, 23 | job_Status 24 | 25 | condition 26 | === 27 | where 1=1 28 | @if(!isEmpty(kJob.categoryId)){ 29 | and category_id =#kJob.categoryId# 30 | @} 31 | @if(!isEmpty(kJob.jobName)){ 32 | and job_name like #'%'+kJob.jobName+'%'# 33 | @} 34 | @if(!isEmpty(kJob.addUser)){ 35 | and add_user =#kJob.addUser# 36 | @} 37 | @if(!isEmpty(kJob.delFlag)){ 38 | and del_flag =#kJob.delFlag# 39 | @} 40 | @if(!isEmpty(kJob.jobStatus)){ 41 | and job_status =#kJob.jobStatus# 42 | @} 43 | sort 44 | === 45 | order by add_time desc 46 | 47 | limit 48 | === 49 | *分页 50 | @if(!isEmpty(start)){ 51 | limit #start# 52 | @} 53 | @if(!isEmpty(size)){ 54 | ,#size# 55 | @} 56 | 57 | allCount 58 | === 59 | *总数量 60 | SELECT COUNT(1) FROM 61 | k_job 62 | #use("condition")# 63 | -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bootstrap Table Chinese translation 3 | * Author: Zhixin Wen 4 | */ 5 | (function ($) { 6 | 'use strict'; 7 | 8 | $.fn.bootstrapTable.locales['zh-CN'] = { 9 | formatLoadingMessage: function () { 10 | return '正在努力地加载数据中,请稍候……'; 11 | }, 12 | formatRecordsPerPage: function (pageNumber) { 13 | return '每页显示 ' + pageNumber + ' 条记录'; 14 | }, 15 | formatShowingRows: function (pageFrom, pageTo, totalRows) { 16 | return '显示第 ' + pageFrom + ' 到第 ' + pageTo + ' 条记录,总共 ' + totalRows + ' 条记录'; 17 | }, 18 | formatSearch: function () { 19 | return '搜索'; 20 | }, 21 | formatNoMatches: function () { 22 | return '没有找到匹配的记录'; 23 | }, 24 | formatPaginationSwitch: function () { 25 | return '隐藏/显示分页'; 26 | }, 27 | formatRefresh: function () { 28 | return '刷新'; 29 | }, 30 | formatToggle: function () { 31 | return '切换'; 32 | }, 33 | formatColumns: function () { 34 | return '列'; 35 | } 36 | }; 37 | 38 | $.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['zh-CN']); 39 | 40 | })(jQuery); 41 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/conf/LoginInterceptor.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.conf; 2 | 3 | import javax.servlet.http.HttpServletRequest; 4 | import javax.servlet.http.HttpServletResponse; 5 | 6 | import org.springframework.web.servlet.HandlerInterceptor; 7 | import org.springframework.web.servlet.ModelAndView; 8 | 9 | import com.zhaxd.common.toolkit.Constant; 10 | 11 | public class LoginInterceptor implements HandlerInterceptor{ 12 | 13 | @Override 14 | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 15 | throws Exception { 16 | Object attribute = request.getSession().getAttribute(Constant.SESSION_ID); 17 | String uri = request.getRequestURI(); 18 | //登陆请求不能被拦截 19 | if(!uri.contains("view/loginUI.shtml") && !uri.contains("index/login.shtml")){ 20 | //判断session中是否有值? 21 | if(attribute == null){ 22 | response.sendRedirect(request.getContextPath() + "/view/loginUI.shtml"); 23 | return false; 24 | } 25 | } 26 | return true; 27 | } 28 | 29 | @Override 30 | public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, 31 | ModelAndView modelAndView) throws Exception { 32 | } 33 | 34 | @Override 35 | public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) 36 | throws Exception { 37 | } 38 | } -------------------------------------------------------------------------------- /src/main/resources/sql/mysql/kTrans.md: -------------------------------------------------------------------------------- 1 | pageQuery 2 | === 3 | *数据库表分页查询 4 | SELECT #use("cols")# FROM 5 | k_trans 6 | #use("condition")# 7 | #use("sort")# 8 | #use("limit")# 9 | 10 | queryByCondition 11 | === 12 | SELECT trans_id FROM k_trans #use("condition")# 13 | 14 | cols 15 | === 16 | *列名 17 | trans_id, 18 | category_Id, 19 | trans_name, 20 | trans_description, 21 | trans_path, 22 | trans_quartz, 23 | trans_status 24 | 25 | condition 26 | === 27 | where 1=1 28 | @if(!isEmpty(kTrans.categoryId)){ 29 | and category_Id =#kTrans.categoryId# 30 | @} 31 | @if(!isEmpty(kTrans.transName)){ 32 | and trans_name like #'%'+kTrans.transName+'%'# 33 | @} 34 | @if(!isEmpty(kTrans.addUser)){ 35 | and add_user =#kTrans.addUser# 36 | @} 37 | @if(!isEmpty(kTrans.delFlag)){ 38 | and del_flag =#kTrans.delFlag# 39 | @} 40 | @if(!isEmpty(kTrans.transStatus)){ 41 | and trans_Status =#kTrans.transStatus# 42 | @} 43 | sort 44 | === 45 | order by add_time desc 46 | 47 | limit 48 | === 49 | *分页 50 | @if(!isEmpty(start)){ 51 | limit #start# 52 | @} 53 | @if(!isEmpty(size)){ 54 | ,#size# 55 | @} 56 | 57 | allCount 58 | === 59 | *总数量 60 | SELECT COUNT(1) FROM 61 | k_trans 62 | #use("condition")# 63 | -------------------------------------------------------------------------------- /src/main/resources/sql/oracle/kJob.md: -------------------------------------------------------------------------------- 1 | pageQuery 2 | === 3 | *数据库表分页查询 4 | SELECT #use("cols")# from ( 5 | SELECT ROWNUM rn , t.* from ( 6 | SELECT #use("cols")# from 7 | k_job 8 | #use("condition")# 9 | #use("sort")# )t 10 | @if(!isEmpty(start)&&!isEmpty(size)){ 11 | where ROWNUM <= #start#+#size# 12 | @} 13 | ) tt 14 | @if(!isEmpty(start)&&!isEmpty(size)){ 15 | where rn > #start# 16 | @} 17 | 18 | queryByCondition 19 | === 20 | SELECT job_Id FROM k_job #use("condition")# 21 | 22 | cols 23 | === 24 | *列名 25 | job_Id, 26 | category_Id, 27 | job_Name, 28 | job_Description, 29 | job_Path, 30 | job_Quartz, 31 | job_Status 32 | 33 | condition 34 | === 35 | where 1=1 36 | @if(!isEmpty(kJob.categoryId)){ 37 | and category_id =#kJob.categoryId# 38 | @} 39 | @if(!isEmpty(kJob.jobName)){ 40 | and job_name like #'%'+kJob.jobName+'%'# 41 | @} 42 | @if(!isEmpty(kJob.addUser)){ 43 | and add_user =#kJob.addUser# 44 | @} 45 | @if(!isEmpty(kJob.delFlag)){ 46 | and del_flag =#kJob.delFlag# 47 | @} 48 | @if(!isEmpty(kJob.jobStatus)){ 49 | and job_status =#kJob.jobStatus# 50 | @} 51 | sort 52 | === 53 | order by add_time desc 54 | 55 | 56 | allCount 57 | === 58 | *总数量 59 | SELECT COUNT(1) FROM 60 | k_job 61 | #use("condition")# 62 | -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/layim/data/groups.json: -------------------------------------------------------------------------------- 1 | { 2 | "status": 1, 3 | "msg": "ok", 4 | "data": [ 5 | { 6 | "id": "100001", 7 | "name": "無言的蒁説", 8 | "face": "img/a1.jpg" 9 | }, 10 | { 11 | "id": "100002", 12 | "name": "婷宝奢侈品", 13 | "face": "img/a2.jpg" 14 | }, 15 | { 16 | "id": "100003", 17 | "name": "忆恨思爱", 18 | "face": "img/a3.jpg" 19 | }, 20 | { 21 | "id": "100004", 22 | "name": "天涯奥拓慢", 23 | "face": "img/a4.jpg" 24 | }, 25 | { 26 | "id": "100005", 27 | "name": "雨落无声的天空", 28 | "face": "img/a5.jpg" 29 | }, 30 | { 31 | "id": "100006", 32 | "name": "李越LycorisRadiate", 33 | "face": "img/a6.jpg" 34 | }, 35 | { 36 | "id": "100007", 37 | "name": "冯胖妞张直丑", 38 | "face": "img/a7.jpg" 39 | }, 40 | { 41 | "id": "100008", 42 | "name": "陈龙hmmm", 43 | "face": "img/a8.jpg" 44 | }, 45 | { 46 | "id": "100009", 47 | "name": "别闹哥胆儿小", 48 | "face": "img/a9.jpg" 49 | }, 50 | { 51 | "id": "100010", 52 | "name": "锅锅锅锅萌哒哒 ", 53 | "face": "img/a10.jpg" 54 | } 55 | ] 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/quartz/model/DBConnectionModel.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.quartz.model; 2 | 3 | public class DBConnectionModel { 4 | 5 | private String connectionDriveClassName; 6 | private String connectionUrl; 7 | private String connectionUser; 8 | private String connectionPassword; 9 | public String getConnectionDriveClassName() { 10 | return connectionDriveClassName; 11 | } 12 | public void setConnectionDriveClassName(String connectionDriveClassName) { 13 | this.connectionDriveClassName = connectionDriveClassName; 14 | } 15 | public String getConnectionUrl() { 16 | return connectionUrl; 17 | } 18 | public void setConnectionUrl(String connectionUrl) { 19 | this.connectionUrl = connectionUrl; 20 | } 21 | public String getConnectionUser() { 22 | return connectionUser; 23 | } 24 | public void setConnectionUser(String connectionUser) { 25 | this.connectionUser = connectionUser; 26 | } 27 | public String getConnectionPassword() { 28 | return connectionPassword; 29 | } 30 | public void setConnectionPassword(String connectionPassword) { 31 | this.connectionPassword = connectionPassword; 32 | } 33 | public DBConnectionModel(String connectionDriveClassName, String connectionUrl, String connectionUser, 34 | String connectionPassword) { 35 | this.connectionDriveClassName = connectionDriveClassName; 36 | this.connectionUrl = connectionUrl; 37 | this.connectionUser = connectionUser; 38 | this.connectionPassword = connectionPassword; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/common/toolkit/MD5Utils.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.common.toolkit; 2 | 3 | import org.apache.commons.codec.digest.DigestUtils; 4 | import org.apache.commons.lang.ArrayUtils; 5 | import org.apache.commons.lang.StringUtils; 6 | 7 | public class MD5Utils { 8 | 9 | private static String salt = "kettlescheduler"; 10 | 11 | /** 12 | * 加密字符串 13 | * @param password 要加密的明文 14 | * @param isAddSalt 是否加默认盐 15 | * @return 加密之后的结果 16 | */ 17 | public static String Encrypt(String password, boolean isAddSalt){ 18 | if (StringUtils.isNotEmpty(password)){ 19 | if (isAddSalt){ 20 | return DigestUtils.md5Hex(DigestUtils.md5(password + salt)); 21 | } else { 22 | return DigestUtils.md5Hex(DigestUtils.md5(password)); 23 | } 24 | } 25 | return null; 26 | } 27 | 28 | /** 29 | * 30 | * @param bytes 31 | * @return 32 | */ 33 | public static String Encrypt(byte[] bytes){ 34 | if (ArrayUtils.isNotEmpty(bytes)){ 35 | return DigestUtils.md5Hex(DigestUtils.md5(bytes)); 36 | } 37 | return null; 38 | } 39 | 40 | /** 41 | * MD5加盐加密 42 | * @param password 要加密的明文 43 | * @param salt 盐 44 | * @return 加密之后的结果 45 | */ 46 | public static String Encrypt(String password, String salt){ 47 | if (StringUtils.isNotEmpty(password)){ 48 | return DigestUtils.md5Hex(DigestUtils.md5(password + salt)); 49 | } 50 | return null; 51 | } 52 | 53 | public static void main(String[] args){ 54 | System.out.println(MD5Utils.Encrypt("admin", true)); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/main/resources/sql/mysql/kJobMonitor.md: -------------------------------------------------------------------------------- 1 | pageQuery 2 | === 3 | *数据库表分页查询 4 | select #use("cols")# from 5 | k_job kj left join k_job_monitor kjm on kjm.monitor_job=kj.job_id left join k_category kc on kj.category_id=kc.category_id 6 | #use("condition")# 7 | #use("sort")# 8 | #use("limit")# 9 | 10 | cols 11 | === 12 | *列名 13 | category_name, 14 | job_name, 15 | monitor_Id, 16 | monitor_Job, 17 | last_Execute_Time, 18 | next_Execute_Time, 19 | monitor_Success, 20 | monitor_Fail 21 | 22 | condition 23 | === 24 | where 1=1 25 | @if(!isEmpty(kJobMonitor.jobName)){ 26 | and kj.job_name like #'%'+kJobMonitor.jobName+'%'# 27 | @} 28 | @if(!isEmpty(categoryId)){ 29 | and kc.category_id =#categoryId# 30 | @} 31 | @if(!isEmpty(kJobMonitor.addUser)){ 32 | and kjm.add_user =#kJobMonitor.addUser# 33 | @} 34 | @if(!isEmpty(kJobMonitor.monitorStatus)){ 35 | and kjm.monitor_status =#kJobMonitor.monitorStatus# 36 | @} 37 | sort 38 | === 39 | order by last_execute_time desc 40 | 41 | limit 42 | === 43 | *分页 44 | @if(!isEmpty(start)){ 45 | limit #start# 46 | @} 47 | @if(!isEmpty(size)){ 48 | ,#size# 49 | @} 50 | 51 | allCount 52 | === 53 | *总数量 54 | SELECT COUNT(1) FROM 55 | k_job kj left join k_job_monitor kjm on kjm.monitor_job=kj.job_id left join k_category kc on kj.category_id=kc.category_id 56 | #use("condition")# 57 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/controller/JobRecordController.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.controller; 2 | 3 | import java.io.IOException; 4 | 5 | import javax.servlet.http.HttpServletRequest; 6 | 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.web.bind.annotation.RequestMapping; 9 | import org.springframework.web.bind.annotation.RestController; 10 | 11 | import com.zhaxd.common.toolkit.Constant; 12 | import com.zhaxd.core.dto.BootTablePage; 13 | import com.zhaxd.core.dto.ResultDto; 14 | import com.zhaxd.core.model.KUser; 15 | import com.zhaxd.web.service.JobRecordService; 16 | import com.zhaxd.web.utils.JsonUtils; 17 | 18 | @RestController 19 | @RequestMapping("/job/record/") 20 | public class JobRecordController { 21 | 22 | @Autowired 23 | private JobRecordService jobRecordService; 24 | 25 | @RequestMapping("getList.shtml") 26 | public String getList(Integer offset, Integer limit, Integer jobId, HttpServletRequest request){ 27 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 28 | BootTablePage list = jobRecordService.getList(offset, limit, kUser.getuId(), jobId); 29 | return JsonUtils.objectToJson(list); 30 | } 31 | 32 | @RequestMapping("getLogContent.shtml") 33 | public String getLogContent(Integer recordId){ 34 | try { 35 | String logContent = jobRecordService.getLogContent(recordId); 36 | return ResultDto.success(logContent.replace("\r\n", "
")); 37 | } catch (IOException e) { 38 | e.printStackTrace(); 39 | return null; 40 | } 41 | } 42 | } -------------------------------------------------------------------------------- /src/main/resources/sql/mysql/kTransMonitor.md: -------------------------------------------------------------------------------- 1 | pageQuery 2 | === 3 | *数据库表分页查询 4 | select #use("cols")# from 5 | k_trans kt left join k_trans_monitor ktm on ktm.monitor_trans=kt.trans_id left join k_category kc on kt.category_id=kc.category_id 6 | #use("condition")# 7 | #use("sort")# 8 | #use("limit")# 9 | 10 | cols 11 | === 12 | *列名 13 | category_name, 14 | trans_name, 15 | monitor_Id, 16 | monitor_trans, 17 | last_Execute_Time, 18 | next_Execute_Time, 19 | monitor_Success, 20 | monitor_Fail 21 | 22 | condition 23 | === 24 | where 1=1 25 | @if(!isEmpty(kTransMonitor.transName)){ 26 | and kt.trans_name like #'%'+kTransMonitor.transName+'%'# 27 | @} 28 | @if(!isEmpty(categoryId)){ 29 | and kc.category_id =#categoryId# 30 | @} 31 | @if(!isEmpty(kTransMonitor.addUser)){ 32 | and ktm.add_user =#kTransMonitor.addUser# 33 | @} 34 | @if(!isEmpty(kTransMonitor.monitorStatus)){ 35 | and ktm.monitor_status =#kTransMonitor.monitorStatus# 36 | @} 37 | sort 38 | === 39 | order by last_execute_time desc 40 | 41 | limit 42 | === 43 | *分页 44 | @if(!isEmpty(start)){ 45 | limit #start# 46 | @} 47 | @if(!isEmpty(size)){ 48 | ,#size# 49 | @} 50 | 51 | allCount 52 | === 53 | *总数量 54 | SELECT COUNT(1) FROM 55 | k_trans kt left join k_trans_monitor ktm on ktm.monitor_trans=kt.trans_id left join k_category kc on kt.category_id=kc.category_id 56 | #use("condition")# 57 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/controller/TransRecordController.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.controller; 2 | 3 | import com.zhaxd.common.toolkit.Constant; 4 | import com.zhaxd.core.dto.BootTablePage; 5 | import com.zhaxd.core.dto.ResultDto; 6 | import com.zhaxd.core.model.KUser; 7 | import com.zhaxd.web.service.TransRecordService; 8 | import com.zhaxd.web.utils.JsonUtils; 9 | import org.springframework.beans.factory.annotation.Autowired; 10 | import org.springframework.web.bind.annotation.RequestMapping; 11 | import org.springframework.web.bind.annotation.RestController; 12 | 13 | import javax.servlet.http.HttpServletRequest; 14 | import java.io.IOException; 15 | 16 | @RestController 17 | @RequestMapping("/trans/record/") 18 | public class TransRecordController { 19 | 20 | @Autowired 21 | private TransRecordService transRecordService; 22 | 23 | @RequestMapping("getList.shtml") 24 | public String getList(Integer offset, Integer limit, Integer transId, HttpServletRequest request){ 25 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 26 | BootTablePage list = transRecordService.getList(offset, limit, kUser.getuId(), transId); 27 | return JsonUtils.objectToJson(list); 28 | } 29 | 30 | @RequestMapping("getLogContent.shtml") 31 | public String getLogContent(Integer recordId){ 32 | try { 33 | String logContent = transRecordService.getLogContent(recordId); 34 | return ResultDto.success(logContent.replace(System.getProperty("line.separator"), "
")); 35 | } catch (IOException e) { 36 | e.printStackTrace(); 37 | return null; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/resources/sql/oracle/dimEtlConfig.md: -------------------------------------------------------------------------------- 1 | pageQuery 2 | === 3 | * 注释 4 | SELECT * FROM ( SELECT beeltT.*, ROWNUM beetl_rn FROM ( select #use("cols")# from KETTLE.DIM_ETL_CONFIG where #use("condition")# ) beeltT WHERE ROWNUM <#end#) WHERE beetl_rn >= #start# 5 | 6 | cols 7 | === 8 | 9 | ID,SOURCE_TABLE,SOURCE_TABLE_NAME,TARGET_TABLE,TARGET_TABLE_NAME,TARGET_TABLE_HIS,DATA_SRC,ETL_LEVEL,C_FLAG,STR_SQL,STR_SQL2,DB_CONN,DB_IP,DB_TYPE,PROJECT,DR,TS,SOURCE_SCHEMA,TARGET_SCHEMA,DATA_TGT,FIELDS,GROUPID,DAYS_KEEP,SOURCE_TABLE1,FIELDS2 10 | 11 | count 12 | === 13 | 14 | select count(*) from KETTLE.DIM_ETL_CONFIG where #use("condition")# 15 | 16 | updateSample 17 | === 18 | 19 | ID=#id#,SOURCE_TABLE=#sourceTable#,SOURCE_TABLE_NAME=#sourceTableName#,TARGET_TABLE=#targetTable#,TARGET_TABLE_NAME=#targetTableName#,TARGET_TABLE_HIS=#targetTableHis#,DATA_SRC=#dataSrc#,ETL_LEVEL=#etlLevel#,C_FLAG=#cFlag#,STR_SQL=#strSql#,STR_SQL2=#strSql2#,DB_CONN=#dbConn#,DB_IP=#dbIp#,DB_TYPE=#dbType#,PROJECT=#project#,DR=#dr#,TS=#ts#,SOURCE_SCHEMA=#sourceSchema#,TARGET_SCHEMA=#targetSchema#,DATA_TGT=#dataTgt#,FIELDS=#fields#,GROUPID=#groupid#,DAYS_KEEP=#daysKeep#,SOURCE_TABLE1=#sourceTable1#,FIELDS2=#fields2# 20 | 21 | condition 22 | === 23 | 24 | 1 = 1 25 | @if(!isEmpty(sourceTable)){ 26 | and SOURCE_TABLE like #'%'+sourceTable+'%'# 27 | @} 28 | @if(!isEmpty(sourceTableName)){ 29 | and SOURCE_TABLE_NAME=#sourceTableName# 30 | @} 31 | @if(!isEmpty(targetTable)){ 32 | and TARGET_TABLE like #'%'+targetTable+'%'# 33 | @} 34 | @if(!isEmpty(targetTableName)){ 35 | and TARGET_TABLE_NAME=#targetTableName# 36 | @} 37 | 38 | 39 | -------------------------------------------------------------------------------- /src/main/webapp/static/js/my/login.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | Metronic.init(); 3 | var $errorMsg = $("#errorMsg"); 4 | var $alert = $("#alert"); 5 | if ($errorMsg.text() === "" || $errorMsg.text() === "null"){ 6 | $alert.css("display","none"); 7 | } 8 | $.backstretch([ 9 | "static/img/bg/1.jpg", 10 | "static/img/bg/2.jpg", 11 | "static/img/bg/3.jpg", 12 | "static/img/bg/4.jpg" 13 | ],{ 14 | fade: 1000, 15 | duration: 8000 16 | } 17 | ); 18 | }); 19 | $(function () { 20 | var localStorage = window.localStorage; 21 | if (localStorage.getItem("uAccount") != null){ 22 | $("#uAccount").val(localStorage.getItem("uAccount")); 23 | $("#uPassword").val(localStorage.getItem("uPassword")); 24 | $("#remember").attr("checked", true); 25 | } 26 | }); 27 | //回车事件 28 | document.onkeydown = keydown; 29 | function keydown(e) { 30 | var currKey = 0, e = e || event; 31 | currKey = e.keyCode || e.which || e.charCode;//支持IE、FF 32 | if (currKey == 13) { 33 | submitFrom(); 34 | } 35 | } 36 | 37 | var submitFrom = function() { 38 | var localStorage = window.localStorage; 39 | var $uAccount = $("#uAccount").val(); 40 | var $uPassword = $("#uPassword").val(); 41 | if ($('#remember').is(':checked')) { 42 | localStorage.setItem("uAccount", $uAccount); 43 | localStorage.setItem("uPassword", $uPassword); 44 | }else{ 45 | if(localStorage.getItem("uAccount") != null){ 46 | localStorage.removeItem("uAccount"); 47 | localStorage.removeItem("uPassword"); 48 | } 49 | } 50 | $("#loginForm").submit(); 51 | } -------------------------------------------------------------------------------- /src/main/webapp/static/lib/bootstrap-fileinput/themes/fa/theme.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * bootstrap-fileinput v4.4.2 3 | * http://plugins.krajee.com/file-input 4 | * 5 | * Font Awesome icon theme configuration for bootstrap-fileinput. Requires font awesome assets to be loaded. 6 | * 7 | * Author: Kartik Visweswaran 8 | * Copyright: 2014 - 2017, Kartik Visweswaran, Krajee.com 9 | * 10 | * Licensed under the BSD 3-Clause 11 | * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md 12 | */!function(a){"use strict";a.fn.fileinputThemes.fa={fileActionSettings:{removeIcon:'',uploadIcon:'',zoomIcon:'',dragIcon:'',indicatorNew:'',indicatorSuccess:'',indicatorError:'',indicatorLoading:''},layoutTemplates:{fileIcon:' '},previewZoomButtonIcons:{prev:'',next:'',toggleheader:'',fullscreen:'',borderless:'',close:''},previewFileIcon:'',browseIcon:'',removeIcon:'',cancelIcon:'',uploadIcon:'',msgValidationErrorIcon:' '}}(window.jQuery); -------------------------------------------------------------------------------- /src/main/resources/sql/oracle/kTrans.md: -------------------------------------------------------------------------------- 1 | pageQuery 2 | === 3 | *数据库表分页查询 4 | SELECT #use("cols")# from ( 5 | SELECT ROWNUM rn , t.* from ( 6 | SELECT #use("cols")# from 7 | k_trans 8 | #use("condition")# 9 | #use("sort")# )t 10 | @if(!isEmpty(start)&&!isEmpty(size)){ 11 | where ROWNUM <= #start#+#size# 12 | @} 13 | ) tt 14 | @if(!isEmpty(start)&&!isEmpty(size)){ 15 | where rn > #start# 16 | @} 17 | 18 | queryByCondition 19 | === 20 | SELECT trans_id FROM k_trans #use("condition")# 21 | 22 | cols 23 | === 24 | *列名 25 | trans_id, 26 | category_Id, 27 | trans_name, 28 | trans_description, 29 | trans_path, 30 | trans_quartz, 31 | trans_status 32 | 33 | condition 34 | === 35 | where 1=1 36 | @if(!isEmpty(kTrans.categoryId)){ 37 | and category_Id =#kTrans.categoryId# 38 | @} 39 | @if(!isEmpty(kTrans.transName)){ 40 | and trans_name like #'%'+kTrans.transName+'%'# 41 | @} 42 | @if(!isEmpty(kTrans.addUser)){ 43 | and add_user =#kTrans.addUser# 44 | @} 45 | @if(!isEmpty(kTrans.delFlag)){ 46 | and del_flag =#kTrans.delFlag# 47 | @} 48 | @if(!isEmpty(kTrans.transStatus)){ 49 | and trans_Status =#kTrans.transStatus# 50 | @} 51 | sort 52 | === 53 | order by add_time desc 54 | 55 | limit 56 | === 57 | *分页 58 | @if(!isEmpty(start)){ 59 | limit #start# 60 | @} 61 | @if(!isEmpty(size)){ 62 | ,#size# 63 | @} 64 | 65 | allCount 66 | === 67 | *总数量 68 | SELECT COUNT(1) FROM 69 | k_trans 70 | #use("condition")# 71 | -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/bootstrap-table/bootstrap-table-mobile.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * bootstrap-table - v1.9.0 - 2015-09-30 3 | * https://github.com/wenzhixin/bootstrap-table 4 | * Copyright (c) 2015 zhixin wen 5 | * Licensed MIT License 6 | */ 7 | !function(a){"use strict";var b=function(b,c){b.options.columnsHidden.length>0&&a.each(b.columns,function(d,e){-1!==b.options.columnsHidden.indexOf(e.field)&&e.visible!==c&&b.toggleColumn(a.fn.bootstrapTable.utils.getFieldIndex(b.columns,e.field),c,!0)})},c=function(a){(a.options.height||a.options.showFooter)&&setTimeout(a.resetView,1)},d=function(a,b,d){a.options.minHeight?b<=a.options.minWidth&&d<=a.options.minHeight?e(a):b>a.options.minWidth&&d>a.options.minHeight&&f(a):b<=a.options.minWidth?e(a):b>a.options.minWidth&&f(a),c(a)},e=function(a){g(a,!1),b(a,!1)},f=function(a){g(a,!0),b(a,!0)},g=function(a,b){a.options.cardView=b,a.toggleView()},h=function(a,b){var c;return function(){var d=this,e=arguments,f=function(){c=null,a.apply(d,e)};clearTimeout(c),c=setTimeout(f,b)}};a.extend(a.fn.bootstrapTable.defaults,{mobileResponsive:!1,minWidth:562,minHeight:void 0,heightThreshold:100,checkOnInit:!0,columnsHidden:[]});var i=a.fn.bootstrapTable.Constructor,j=i.prototype.init;i.prototype.init=function(){if(j.apply(this,Array.prototype.slice.apply(arguments)),this.options.mobileResponsive&&this.options.minWidth){var b=this,c={width:a(window).width(),height:a(window).height()};if(a(window).on("resize orientationchange",h(function(){var e=a(this).height(),f=a(this).width();(Math.abs(c.height-e)>b.options.heightThreshold||c.width!=f)&&(d(b,f,e),c={width:f,height:e})},200)),this.options.checkOnInit){var e=a(window).height(),f=a(window).width();d(this,f,e),c={width:f,height:e}}}}}(jQuery); 8 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/common/exception/KettleMasterException.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.common.exception; 2 | 3 | import java.io.PrintWriter; 4 | import java.io.StringWriter; 5 | 6 | public class KettleMasterException extends RuntimeException { 7 | 8 | static final long serialVersionUID = 1662900257135756746L; 9 | 10 | public KettleMasterException() { 11 | super(); 12 | } 13 | 14 | public KettleMasterException(String message) { 15 | super(message); 16 | } 17 | 18 | public KettleMasterException(String message, Throwable cause) { 19 | super(message, cause); 20 | } 21 | 22 | public KettleMasterException(Throwable cause) { 23 | super(cause); 24 | } 25 | 26 | /** 27 | * 将CheckedException转换为UncheckedException. 28 | */ 29 | public static RuntimeException unchecked(Exception e) { 30 | if (e instanceof RuntimeException) { 31 | return (RuntimeException) e; 32 | } else { 33 | return new RuntimeException(e); 34 | } 35 | } 36 | 37 | /** 38 | * 将ErrorStack转化为String. 39 | */ 40 | public static String getStackTraceAsString(Exception e) { 41 | StringWriter stringWriter = new StringWriter(); 42 | e.printStackTrace(new PrintWriter(stringWriter)); 43 | return stringWriter.toString(); 44 | } 45 | 46 | /** 47 | * 判断异常是否由某些底层的异常引起. 48 | */ 49 | public static boolean isCausedBy(Exception ex, 50 | @SuppressWarnings("unchecked") Class... causeExceptionClasses) { 51 | Throwable cause = ex.getCause(); 52 | while (cause != null) { 53 | for (Class causeClass : causeExceptionClasses) { 54 | if (causeClass.isInstance(cause)) { 55 | return true; 56 | } 57 | } 58 | cause = cause.getCause(); 59 | } 60 | return false; 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/webapp/Html/js/messages/message_en_US.properties: -------------------------------------------------------------------------------- 1 | #************User Properties****************************************** 2 | org.ukettle.iQuartz.Verify.User.Name = Please check the name ! 3 | org.ukettle.iQuartz.Verify.User.Email = Please check the email ! 4 | org.ukettle.iQuartz.Verify.User.Password = Please check the password ! 5 | #************Kettle Properties**************************************** 6 | org.ukettle.iQuartz.Verify.Kettle.Repository = Repository 7 | org.ukettle.iQuartz.Verify.Kettle.Repository.Choose = Please Choose Repository ! 8 | org.ukettle.iQuartz.Verify.Kettle.Repository.Parameters.A = Please check the 9 | org.ukettle.iQuartz.Verify.Kettle.Repository.Parameters.B = Parameter value ! 10 | org.ukettle.iQuartz.Verify.Kettle.Monitor.Log = Log Info 11 | org.ukettle.iQuartz.Verify.Kettle.Monitor.Out = Monitor Info 12 | #************Pbulic Properties**************************************** 13 | org.ukettle.iQuartz.Verify.Quartz.Schedule.Executor = Executor 14 | org.ukettle.iQuartz.Verify.Quartz.Schedule.Executor.Choose = Please check the executor ! 15 | org.ukettle.iQuartz.Verify.Quartz.Schedule.Group.Choose = Please Choose Group ! 16 | org.ukettle.iQuartz.Verify.Quartz.Schedule.Title.Exist = Title already exists ! 17 | org.ukettle.iQuartz.Verify.Quartz.Schedule.Title = Please check the title ! 18 | org.ukettle.iQuartz.Verify.Quartz.Schedule.Parameters.A = Please check the 19 | org.ukettle.iQuartz.Verify.Quartz.Schedule.Parameters.B = Parameter value. 20 | org.ukettle.iQuartz.Verify.Quartz.Schedule.Search = Please choose the query conditions ! 21 | #************Pbulic Properties**************************************** 22 | org.ukettle.iQuartz.Verify.Success = Success 23 | org.ukettle.iQuartz.Verify.Error = Error -------------------------------------------------------------------------------- /src/test/java/com/zhaxd/test/string/StringTest.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.test.string; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | import java.util.Date; 6 | 7 | import org.apache.commons.io.FileUtils; 8 | import org.apache.commons.lang.StringUtils; 9 | import org.junit.Test; 10 | 11 | import com.zhaxd.common.toolkit.Constant; 12 | import com.zhaxd.web.utils.DateTime; 13 | 14 | 15 | public class StringTest { 16 | 17 | @Test 18 | public void test1(){ 19 | String aaa = "/mysql-mysql"; 20 | int lastIndexOf = StringUtils.lastIndexOf(aaa, "/"); 21 | System.out.println(aaa.substring(0, lastIndexOf)); 22 | System.out.println(aaa.substring(lastIndexOf + 1, aaa.length())); 23 | } 24 | 25 | 26 | @Test 27 | public void GenerateString(){ 28 | System.out.println(new Date().getTime()); 29 | StringBuilder stringBuilder = new StringBuilder(); 30 | DateTime dateTime = new DateTime(); 31 | Integer addMinute = dateTime.second() >= 58 ? 2 : 1; 32 | stringBuilder.append("0").append(" ") 33 | .append(dateTime.minute() + addMinute).append(" ") 34 | .append(dateTime.hour(true)).append(" ") 35 | .append(dateTime.dayOfMonth()).append(" ") 36 | .append(dateTime.monthStartFromOne()).append(" ") 37 | .append("?").append(" ") 38 | .append(String.valueOf(dateTime.year())); 39 | System.out.println(stringBuilder.toString()); 40 | System.out.println(new Date().getTime()); 41 | } 42 | 43 | @Test 44 | public void testBR() throws IOException{ 45 | String readFileToString = FileUtils.readFileToString(new File("F:\\tmp\\kettle-master\\1\\trans@kettle-test-6.2-log\\1496459302270.txt"), Constant.DEFAULT_ENCODING); 46 | System.out.println(readFileToString); 47 | 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /src/main/webapp/static/lib/bootstrap-fileinput/css/fileinput-rtl.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * bootstrap-fileinput v4.4.2 3 | * http://plugins.krajee.com/file-input 4 | * 5 | * Krajee RTL (Right To Left) default styling for bootstrap-fileinput. 6 | * 7 | * Author: Kartik Visweswaran 8 | * Copyright: 2014 - 2017, Kartik Visweswaran, Krajee.com 9 | * 10 | * Licensed under the BSD 3-Clause 11 | * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md 12 | */.kv-rtl{direction:rtl}.kv-rtl .close{float:left}.kv-rtl .input-group-btn:last-child>.btn{border-radius:4px 0 0 4px!important}.kv-rtl .input-group .form-control:first-child{border-radius:0 4px 4px 0!important}.kv-rtl .file-loading{right:auto;left:0;text-align:left}.kv-rtl .btn-file input[type=file]{right:auto;left:0;text-align:left;background:100% 0 none}.kv-rtl .file-error-message pre,.kv-rtl .file-error-message ul,.kv-rtl .file-zoom-dialog,.kv-rtl .krajee-default .file-actions,.kv-rtl .krajee-default .file-other-error{text-align:right}.kv-rtl .krajee-default.file-preview-frame{box-shadow:-1px 1px 5px 0 #a2958a;float:right}.kv-rtl .krajee-default.file-preview-frame:not(.file-preview-error):hover{box-shadow:-3px 3px 5px 0 #333}.kv-rtl .krajee-default .file-footer-buttons{float:left}.kv-rtl .krajee-default .file-drag-handle,.kv-rtl .krajee-default .file-upload-indicator{left:auto;right:-6px;padding:8px 3px 1px 8px;border-top-left-radius:24px;border-top-right-radius:0}.kv-rtl .file-drop-zone{margin:12px 12px 12px 15px}.kv-rtl .floating-buttons{left:10px;right:auto}.kv-rtl .floating-buttons .btn,.kv-rtl .kv-zoom-actions .btn{margin-right:3px}.kv-rtl .btn-prev{right:1px;left:auto}.kv-rtl .btn-next{left:1px;right:auto}.kv-rtl .pull-right{float:left!important}.kv-rtl .pull-left{float:right!important}.kv-rtl .modal-title{float:right;direction:ltr} -------------------------------------------------------------------------------- /src/main/resources/sql/oracle/kJobMonitor.md: -------------------------------------------------------------------------------- 1 | pageQuery 2 | === 3 | *数据库表分页查询 4 | SELECT #use("cols")# from ( 5 | SELECT ROWNUM rn , t.* from ( 6 | SELECT #use("cols")# from 7 | k_job kj left join k_job_monitor kjm on kjm.monitor_job=kj.job_id left join k_category kc on kj.category_id=kc.category_id 8 | #use("condition")# 9 | #use("sort")# )t 10 | @if(!isEmpty(start)&&!isEmpty(size)){ 11 | where ROWNUM <= #start#+#size# 12 | @} 13 | ) tt 14 | @if(!isEmpty(start)&&!isEmpty(size)){ 15 | where rn > #start# 16 | @} 17 | 18 | cols 19 | === 20 | *列名 21 | category_name, 22 | job_name, 23 | monitor_Id, 24 | monitor_Job, 25 | last_Execute_Time, 26 | next_Execute_Time, 27 | monitor_Success, 28 | monitor_Fail 29 | 30 | condition 31 | === 32 | where 1=1 33 | @if(!isEmpty(kJobMonitor.jobName)){ 34 | and kj.job_name like #'%'+kJobMonitor.jobName+'%'# 35 | @} 36 | @if(!isEmpty(categoryId)){ 37 | and kc.category_id =#categoryId# 38 | @} 39 | @if(!isEmpty(kJobMonitor.addUser)){ 40 | and kjm.add_user =#kJobMonitor.addUser# 41 | @} 42 | @if(!isEmpty(kJobMonitor.monitorStatus)){ 43 | and kjm.monitor_status =#kJobMonitor.monitorStatus# 44 | @} 45 | sort 46 | === 47 | order by last_execute_time desc 48 | 49 | limit 50 | === 51 | *分页 52 | @if(!isEmpty(start)){ 53 | limit #start# 54 | @} 55 | @if(!isEmpty(size)){ 56 | ,#size# 57 | @} 58 | 59 | allCount 60 | === 61 | *总数量 62 | SELECT COUNT(1) FROM 63 | k_job kj left join k_job_monitor kjm on kjm.monitor_job=kj.job_id left join k_category kc on kj.category_id=kc.category_id 64 | #use("condition")# 65 | -------------------------------------------------------------------------------- /src/main/resources/sql/oracle/kTransMonitor.md: -------------------------------------------------------------------------------- 1 | pageQuery 2 | === 3 | *数据库表分页查询 4 | SELECT #use("cols")# from ( 5 | SELECT ROWNUM rn , t.* from ( 6 | SELECT #use("cols")# from 7 | k_trans kt left join k_trans_monitor ktm on ktm.monitor_trans=kt.trans_id left join k_category kc on kt.category_id=kc.category_id 8 | #use("condition")# 9 | #use("sort")# )t 10 | @if(!isEmpty(start)&&!isEmpty(size)){ 11 | where ROWNUM <= #start#+#size# 12 | @} 13 | ) tt 14 | @if(!isEmpty(start)&&!isEmpty(size)){ 15 | where rn > #start# 16 | @} 17 | 18 | cols 19 | === 20 | *列名 21 | category_name, 22 | trans_name, 23 | monitor_Id, 24 | monitor_trans, 25 | last_Execute_Time, 26 | next_Execute_Time, 27 | monitor_Success, 28 | monitor_Fail 29 | 30 | condition 31 | === 32 | where 1=1 33 | @if(!isEmpty(kTransMonitor.transName)){ 34 | and kt.trans_name like #'%'+kTransMonitor.transName+'%'# 35 | @} 36 | @if(!isEmpty(categoryId)){ 37 | and kc.category_id =#categoryId# 38 | @} 39 | @if(!isEmpty(kTransMonitor.addUser)){ 40 | and ktm.add_user =#kTransMonitor.addUser# 41 | @} 42 | @if(!isEmpty(kTransMonitor.monitorStatus)){ 43 | and ktm.monitor_status =#kTransMonitor.monitorStatus# 44 | @} 45 | sort 46 | === 47 | order by last_execute_time desc 48 | 49 | limit 50 | === 51 | *分页 52 | @if(!isEmpty(start)){ 53 | limit #start# 54 | @} 55 | @if(!isEmpty(size)){ 56 | ,#size# 57 | @} 58 | 59 | allCount 60 | === 61 | *总数量 62 | SELECT COUNT(1) FROM 63 | k_trans kt left join k_trans_monitor ktm on ktm.monitor_trans=kt.trans_id left join k_category kc on kt.category_id=kc.category_id 64 | #use("condition")# 65 | -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/layim/data/group.json: -------------------------------------------------------------------------------- 1 | { 2 | "status": 1, 3 | "msg": "ok", 4 | "data": [ 5 | { 6 | "name": "H+交流群", 7 | "nums": 36, 8 | "id": 1, 9 | "item": [ 10 | { 11 | "id": "101", 12 | "name": "H+ Bug反馈", 13 | "face": "http://tp2.sinaimg.cn/2211874245/180/40050524279/0" 14 | }, 15 | { 16 | "id": "102", 17 | "name": "H+ 技术交流", 18 | "face": "http://tp3.sinaimg.cn/1820711170/180/1286855219/1" 19 | } 20 | ] 21 | }, 22 | { 23 | "name": "Bootstrap", 24 | "nums": 16, 25 | "id": 2, 26 | "item": [ 27 | { 28 | "id": "103", 29 | "name": "Bootstrap中文", 30 | "face": "http://tp2.sinaimg.cn/2211874245/180/40050524279/0" 31 | }, 32 | { 33 | "id": "104", 34 | "name": "Bootstrap资源", 35 | "face": "http://tp3.sinaimg.cn/1820711170/180/1286855219/1" 36 | } 37 | ] 38 | }, 39 | { 40 | "name": "WebApp", 41 | "nums": 106, 42 | "id": 3, 43 | "item": [ 44 | { 45 | "id": "105", 46 | "name": "移动开发", 47 | "face": "http://tp2.sinaimg.cn/2211874245/180/40050524279/0" 48 | }, 49 | { 50 | "id": "106", 51 | "name": "H5前言", 52 | "face": "http://tp3.sinaimg.cn/1820711170/180/1286855219/1" 53 | } 54 | ] 55 | } 56 | ] 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/service/JobRecordService.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.service; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | import java.util.List; 6 | 7 | import org.apache.commons.io.FileUtils; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.stereotype.Service; 10 | 11 | import com.zhaxd.common.toolkit.Constant; 12 | import com.zhaxd.core.dto.BootTablePage; 13 | import com.zhaxd.core.mapper.KJobRecordDao; 14 | import com.zhaxd.core.model.KJobRecord; 15 | 16 | @Service 17 | public class JobRecordService { 18 | 19 | @Autowired 20 | private KJobRecordDao kJobRecordDao; 21 | 22 | /** 23 | * @Title getList 24 | * @Description 获取带分页的列表 25 | * @param start 起始行数 26 | * @param size 每页行数 27 | * @param uId 用户ID 28 | * @param jobId 作业ID 29 | * @return 30 | * @return BootTablePage 31 | */ 32 | public BootTablePage getList(Integer start, Integer size, Integer uId, Integer jobId){ 33 | KJobRecord template = new KJobRecord(); 34 | template.setAddUser(uId); 35 | if (jobId != null){ 36 | template.setRecordJob(jobId); 37 | } 38 | List kJobRecordList = kJobRecordDao.template(template, start, size); 39 | long totalCount = kJobRecordDao.templateCount(template); 40 | BootTablePage bootTablePage = new BootTablePage(); 41 | bootTablePage.setRows(kJobRecordList); 42 | bootTablePage.setTotal(totalCount); 43 | return bootTablePage; 44 | } 45 | 46 | /** 47 | * @Title getLogContent 48 | * @Description 转换日志内容 49 | * @param recordId 转换记录ID 50 | * @return 51 | * @throws IOException 52 | * @return String 53 | */ 54 | public String getLogContent(Integer jobId) throws IOException{ 55 | KJobRecord kJobRecord = kJobRecordDao.unique(jobId); 56 | String logFilePath = kJobRecord.getLogFilePath(); 57 | return FileUtils.readFileToString(new File(logFilePath), Constant.DEFAULT_ENCODING); 58 | } 59 | } -------------------------------------------------------------------------------- /src/main/webapp/static/lib/bootstrap-fileinput/themes/gly/theme.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * bootstrap-fileinput v4.4.2 3 | * http://plugins.krajee.com/file-input 4 | * 5 | * Glyphicon (default) theme configuration for bootstrap-fileinput. 6 | * 7 | * Author: Kartik Visweswaran 8 | * Copyright: 2014 - 2017, Kartik Visweswaran, Krajee.com 9 | * 10 | * Licensed under the BSD 3-Clause 11 | * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md 12 | */!function(i){"use strict";i.fn.fileinputThemes.gly={fileActionSettings:{removeIcon:'',uploadIcon:'',zoomIcon:'',dragIcon:'',indicatorNew:'',indicatorSuccess:'',indicatorError:'',indicatorLoading:''},layoutTemplates:{fileIcon:''},previewZoomButtonIcons:{prev:'',next:'',toggleheader:'',fullscreen:'',borderless:'',close:''},previewFileIcon:'',browseIcon:' ',removeIcon:'',cancelIcon:'',uploadIcon:'',msgValidationErrorIcon:' '}}(window.jQuery); -------------------------------------------------------------------------------- /src/main/webapp/Html/js/messages/message_zh_CN.properties: -------------------------------------------------------------------------------- 1 | #************User Properties****************************************** 2 | org.ukettle.iQuartz.Verify.User.Name = \u8bf7\u68c0\u67e5\u7528\u6237\u540d! 3 | org.ukettle.iQuartz.Verify.User.Email = \u8bf7\u68c0\u67e5\u90ae\u4ef6\u5730\u5740! 4 | org.ukettle.iQuartz.Verify.User.Password = \u8bf7\u68c0\u67e5\u5bc6\u7801! 5 | #************Kettle Properties**************************************** 6 | org.ukettle.iQuartz.Verify.Kettle.Repository = \u8d44 \u6e90 \u5e93 7 | org.ukettle.iQuartz.Verify.Kettle.Repository.Choose = \u8bf7\u9009\u62e9\u8d44\u6e90\u5e93! 8 | org.ukettle.iQuartz.Verify.Kettle.Repository.Parameters.A = \u8bf7\u68c0\u67e5 9 | org.ukettle.iQuartz.Verify.Kettle.Repository.Parameters.B = \u53c2\u6570\u7684\u503c! 10 | org.ukettle.iQuartz.Verify.Kettle.Monitor.Log = \u65e5\u5fd7\u4fe1\u606f 11 | org.ukettle.iQuartz.Verify.Kettle.Monitor.Out = \u76d1\u63a7\u4fe1\u606f 12 | #************Pbulic Properties**************************************** 13 | org.ukettle.iQuartz.Verify.Quartz.Schedule.Executor = \u6267\u884c\u8005 14 | org.ukettle.iQuartz.Verify.Quartz.Schedule.Executor.Choose = \u8bf7\u68c0\u67e5\u6267\u884c\u8005! 15 | org.ukettle.iQuartz.Verify.Quartz.Schedule.Group.Choose = \u8bf7\u9009\u62e9\u7fa4\u7ec4! 16 | org.ukettle.iQuartz.Verify.Quartz.Schedule.Title.Exist = \u6807\u9898\u5df2\u5b58\u5728 17 | org.ukettle.iQuartz.Verify.Quartz.Schedule.Title = \u8bf7\u68c0\u67e5\u6807\u9898! 18 | org.ukettle.iQuartz.Verify.Quartz.Schedule.Parameters.A = \u8bf7\u68c0\u67e5 19 | org.ukettle.iQuartz.Verify.Quartz.Schedule.Parameters.B = \u53c2\u6570\u7684\u503c! 20 | org.ukettle.iQuartz.Verify.Quartz.Schedule.Search = \u8bf7\u9009\u62e9\u67e5\u8be2\u6761\u4ef6! 21 | #************Pbulic Properties**************************************** 22 | org.ukettle.iQuartz.Verify.Success = \u64cd\u4f5c\u6210\u529f 23 | org.ukettle.iQuartz.Verify.Error = \u64cd\u4f5c\u5931\u8d25 -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/service/TransRecordService.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.service; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | import java.util.List; 6 | 7 | import org.apache.commons.io.FileUtils; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.stereotype.Service; 10 | 11 | import com.zhaxd.common.toolkit.Constant; 12 | import com.zhaxd.core.dto.BootTablePage; 13 | import com.zhaxd.core.mapper.KTransRecordDao; 14 | import com.zhaxd.core.model.KTransRecord; 15 | 16 | @Service 17 | public class TransRecordService { 18 | 19 | @Autowired 20 | private KTransRecordDao kTransRecordDao; 21 | 22 | /** 23 | * @Title getList 24 | * @Description 获取列表 25 | * @param start 其实行数 26 | * @param size 结束行数 27 | * @param uId 用户ID 28 | * @param transId 转换ID 29 | * @return 30 | * @return BootTablePage 31 | */ 32 | public BootTablePage getList(Integer start, Integer size, Integer uId, Integer transId){ 33 | KTransRecord template = new KTransRecord(); 34 | template.setAddUser(uId); 35 | if (transId != null){ 36 | template.setRecordTrans(transId); 37 | } 38 | List kTransRecordList = kTransRecordDao.template(template, start, size); 39 | long totalCount = kTransRecordDao.templateCount(template); 40 | BootTablePage bootTablePage = new BootTablePage(); 41 | bootTablePage.setRows(kTransRecordList); 42 | bootTablePage.setTotal(totalCount); 43 | return bootTablePage; 44 | } 45 | 46 | /** 47 | * @Title getLogContent 48 | * @Description 转换日志内容 49 | * @param recordId 转换记录ID 50 | * @return 51 | * @throws IOException 52 | * @return String 53 | */ 54 | public String getLogContent(Integer recordId) throws IOException{ 55 | KTransRecord kTransRecord = kTransRecordDao.unique(recordId); 56 | String logFilePath = kTransRecord.getLogFilePath(); 57 | return FileUtils.readFileToString(new File(logFilePath), Constant.DEFAULT_ENCODING); 58 | } 59 | 60 | } -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/model/KQuartz.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.model; 2 | 3 | import org.beetl.sql.core.annotatoin.SeqID; 4 | 5 | import java.util.Date; 6 | 7 | public class KQuartz { 8 | //任务ID 9 | @SeqID(name="QUARTZ_ID_SEQ") 10 | private Integer quartzId ; 11 | //添加者 12 | private Integer addUser ; 13 | //是否删除(1:存在;0:删除) 14 | private Integer delFlag ; 15 | //编辑者 16 | private Integer editUser ; 17 | //定时策略 18 | private String quartzCron ; 19 | //任务描述 20 | private String quartzDescription ; 21 | //添加时间 22 | private Date addTime ; 23 | //编辑时间 24 | private Date editTime ; 25 | 26 | public KQuartz() { 27 | } 28 | 29 | public Integer getQuartzId(){ 30 | return quartzId; 31 | } 32 | public void setQuartzId(Integer quartzId ){ 33 | this.quartzId = quartzId; 34 | } 35 | 36 | public Integer getAddUser(){ 37 | return addUser; 38 | } 39 | public void setAddUser(Integer addUser ){ 40 | this.addUser = addUser; 41 | } 42 | 43 | public Integer getDelFlag(){ 44 | return delFlag; 45 | } 46 | public void setDelFlag(Integer delFlag ){ 47 | this.delFlag = delFlag; 48 | } 49 | 50 | public Integer getEditUser(){ 51 | return editUser; 52 | } 53 | public void setEditUser(Integer editUser ){ 54 | this.editUser = editUser; 55 | } 56 | 57 | public String getQuartzCron(){ 58 | return quartzCron; 59 | } 60 | public void setQuartzCron(String quartzCron ){ 61 | this.quartzCron = quartzCron; 62 | } 63 | 64 | public String getQuartzDescription(){ 65 | return quartzDescription; 66 | } 67 | public void setQuartzDescription(String quartzDescription ){ 68 | this.quartzDescription = quartzDescription; 69 | } 70 | 71 | public Date getAddTime(){ 72 | return addTime; 73 | } 74 | public void setAddTime(Date addTime ){ 75 | this.addTime = addTime; 76 | } 77 | 78 | public Date getEditTime(){ 79 | return editTime; 80 | } 81 | public void setEditTime(Date editTime ){ 82 | this.editTime = editTime; 83 | } 84 | 85 | } -------------------------------------------------------------------------------- /src/main/webapp/static/lib/bootstrap-fileinput/themes/explorer/theme.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * bootstrap-fileinput v4.4.2 3 | * http://plugins.krajee.com/file-input 4 | * 5 | * Krajee Explorer theme configuration for bootstrap-fileinput. Load this theme file after loading `fileinput.js`. 6 | * 7 | * Author: Kartik Visweswaran 8 | * Copyright: 2014 - 2017, Kartik Visweswaran, Krajee.com 9 | * 10 | * Licensed under the BSD 3-Clause 11 | * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md 12 | */!function(e){"use strict";var t='\n {close}
\n \n
\n
\n
\n
\n',footer:'
{caption}
{size}{progress}{indicator} {actions}',actions:'{drag}\n
\n \n
',zoomCache:'{zoomContent}
'},previewMarkupTags:{tagBefore1:t+">"+i,tagBefore2:t+' title="{caption}">'+i,tagAfter:"\n{footer}\n"},previewSettings:{image:{height:"60px"},html:{width:"100px",height:"60px"},text:{width:"100px",height:"60px"},video:{width:"auto",height:"60px"},audio:{width:"auto",height:"60px"},flash:{width:"100%",height:"60px"},object:{width:"100%",height:"60px"},pdf:{width:"100px",height:"60px"},other:{width:"100%",height:"60px"}},frameClass:"explorer-frame"}}(window.jQuery); -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/model/KJobRecord.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.model; 2 | 3 | import org.beetl.sql.core.annotatoin.SeqID; 4 | 5 | import java.util.Date; 6 | 7 | public class KJobRecord { 8 | //作业记录ID 9 | @SeqID(name="JOB_RECORD_ID_SEQ") 10 | private Integer recordId ; 11 | //作业ID 12 | private Integer recordJob ; 13 | //任务执行结果(1:成功;2:失败) 14 | private Integer recordStatus ; 15 | //添加人 16 | private Integer addUser; 17 | //作业日志记录文件保存位置 18 | private String logFilePath ; 19 | //启动时间 20 | private Date startTime ; 21 | //停止时间 22 | private Date stopTime ; 23 | 24 | public KJobRecord() { 25 | } 26 | 27 | public Integer getRecordId(){ 28 | return recordId; 29 | } 30 | public void setRecordId(Integer recordId ){ 31 | this.recordId = recordId; 32 | } 33 | 34 | public Integer getRecordJob(){ 35 | return recordJob; 36 | } 37 | public void setRecordJob(Integer recordJob ){ 38 | this.recordJob = recordJob; 39 | } 40 | 41 | public Integer getRecordStatus(){ 42 | return recordStatus; 43 | } 44 | public void setRecordStatus(Integer recordStatus ){ 45 | this.recordStatus = recordStatus; 46 | } 47 | 48 | public String getLogFilePath(){ 49 | return logFilePath; 50 | } 51 | public void setLogFilePath(String logFilePath ){ 52 | this.logFilePath = logFilePath; 53 | } 54 | 55 | public Date getStartTime(){ 56 | return startTime; 57 | } 58 | public void setStartTime(Date startTime ){ 59 | this.startTime = startTime; 60 | } 61 | 62 | public Date getStopTime(){ 63 | return stopTime; 64 | } 65 | public void setStopTime(Date stopTime ){ 66 | this.stopTime = stopTime; 67 | } 68 | 69 | @Override 70 | public String toString() { 71 | return "KJobRecord [recordId=" + recordId + ", recordJob=" + recordJob + ", recordStatus=" + recordStatus 72 | + ", addUser=" + addUser + ", logFilePath=" + logFilePath + ", startTime=" + startTime + ", stopTime=" 73 | + stopTime + "]"; 74 | } 75 | 76 | public Integer getAddUser() { 77 | return addUser; 78 | } 79 | 80 | public void setAddUser(Integer addUser) { 81 | this.addUser = addUser; 82 | } 83 | } -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/dto/kettle/RepositoryTree.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.dto.kettle; 2 | 3 | public class RepositoryTree { 4 | 5 | private String id; 6 | private String parent; 7 | private String text; 8 | private String icon; 9 | private Object state; 10 | private String type; 11 | private boolean isLasted; 12 | private String path; 13 | 14 | public String getType() { 15 | return type; 16 | } 17 | public void setType(String type) { 18 | this.type = type; 19 | } 20 | public String getPath() { 21 | return path; 22 | } 23 | public void setPath(String path) { 24 | this.path = path; 25 | } 26 | public boolean isLasted() { 27 | return isLasted; 28 | } 29 | public void setLasted(boolean isLasted) { 30 | this.isLasted = isLasted; 31 | } 32 | public String getId() { 33 | return id; 34 | } 35 | public void setId(String id) { 36 | this.id = id; 37 | } 38 | public String getParent() { 39 | return parent; 40 | } 41 | public void setParent(String parent) { 42 | this.parent = parent; 43 | } 44 | public String getText() { 45 | return text; 46 | } 47 | public void setText(String text) { 48 | this.text = text; 49 | } 50 | public String getIcon() { 51 | return icon; 52 | } 53 | public void setIcon(String icon) { 54 | this.icon = icon; 55 | } 56 | public Object getState() { 57 | return state; 58 | } 59 | public void setState(Object state) { 60 | this.state = state; 61 | } 62 | public RepositoryTree(String id, String parent, String text, String icon, Object state, String type, 63 | boolean isLasted, String path) { 64 | super(); 65 | this.id = id; 66 | this.parent = parent; 67 | this.text = text; 68 | this.icon = icon; 69 | this.state = state; 70 | this.type = type; 71 | this.isLasted = isLasted; 72 | this.path = path; 73 | } 74 | public RepositoryTree() { 75 | } 76 | 77 | @Override 78 | public String toString() { 79 | return "RepositoryTree [id=" + id + ", parent=" + parent + ", text=" + text + ", icon=" + icon + ", state=" 80 | + state + ", type=" + type + ", isLasted=" + isLasted + ", path=" + path + "]"; 81 | } 82 | } -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/model/KTransRecord.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.model; 2 | 3 | import org.beetl.sql.core.annotatoin.SeqID; 4 | 5 | import java.util.Date; 6 | 7 | public class KTransRecord { 8 | //转换记录ID 9 | @SeqID(name="TRANS_RECORD_ID_SEQ") 10 | private Integer recordId ; 11 | //任务执行结果(1:成功;2:失败) 12 | private Integer recordStatus ; 13 | //转换ID 14 | private Integer recordTrans ; 15 | //添加人 16 | private Integer addUser; 17 | //转换日志记录文件保存位置 18 | private String logFilePath ; 19 | //启动时间 20 | private Date startTime ; 21 | //停止时间 22 | private Date stopTime ; 23 | 24 | public KTransRecord() { 25 | } 26 | 27 | public Integer getRecordId(){ 28 | return recordId; 29 | } 30 | public void setRecordId(Integer recordId ){ 31 | this.recordId = recordId; 32 | } 33 | 34 | public Integer getRecordStatus(){ 35 | return recordStatus; 36 | } 37 | public void setRecordStatus(Integer recordStatus ){ 38 | this.recordStatus = recordStatus; 39 | } 40 | 41 | public Integer getRecordTrans(){ 42 | return recordTrans; 43 | } 44 | public void setRecordTrans(Integer recordTrans ){ 45 | this.recordTrans = recordTrans; 46 | } 47 | 48 | public String getLogFilePath(){ 49 | return logFilePath; 50 | } 51 | public void setLogFilePath(String logFilePath ){ 52 | this.logFilePath = logFilePath; 53 | } 54 | 55 | public Date getStartTime(){ 56 | return startTime; 57 | } 58 | public void setStartTime(Date startTime ){ 59 | this.startTime = startTime; 60 | } 61 | 62 | public Date getStopTime(){ 63 | return stopTime; 64 | } 65 | public void setStopTime(Date stopTime ){ 66 | this.stopTime = stopTime; 67 | } 68 | 69 | @Override 70 | public String toString() { 71 | return "KTransRecord [recordId=" + recordId + ", recordStatus=" + recordStatus + ", recordTrans=" + recordTrans 72 | + ", addUser=" + addUser + ", logFilePath=" + logFilePath + ", startTime=" + startTime + ", stopTime=" 73 | + stopTime + "]"; 74 | } 75 | 76 | public Integer getAddUser() { 77 | return addUser; 78 | } 79 | 80 | public void setAddUser(Integer addUser) { 81 | this.addUser = addUser; 82 | } 83 | } -------------------------------------------------------------------------------- /src/main/webapp/static/lib/bootstrap-fileinput/themes/fa/theme.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * bootstrap-fileinput v4.4.2 3 | * http://plugins.krajee.com/file-input 4 | * 5 | * Font Awesome icon theme configuration for bootstrap-fileinput. Requires font awesome assets to be loaded. 6 | * 7 | * Author: Kartik Visweswaran 8 | * Copyright: 2014 - 2017, Kartik Visweswaran, Krajee.com 9 | * 10 | * Licensed under the BSD 3-Clause 11 | * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md 12 | */ 13 | (function ($) { 14 | "use strict"; 15 | 16 | $.fn.fileinputThemes.fa = { 17 | fileActionSettings: { 18 | removeIcon: '', 19 | uploadIcon: '', 20 | zoomIcon: '', 21 | dragIcon: '', 22 | indicatorNew: '', 23 | indicatorSuccess: '', 24 | indicatorError: '', 25 | indicatorLoading: '' 26 | }, 27 | layoutTemplates: { 28 | fileIcon: ' ' 29 | }, 30 | previewZoomButtonIcons: { 31 | prev: '', 32 | next: '', 33 | toggleheader: '', 34 | fullscreen: '', 35 | borderless: '', 36 | close: '' 37 | }, 38 | previewFileIcon: '', 39 | browseIcon: '', 40 | removeIcon: '', 41 | cancelIcon: '', 42 | uploadIcon: '', 43 | msgValidationErrorIcon: ' ' 44 | }; 45 | })(window.jQuery); 46 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/controller/JobMonitorController.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.controller; 2 | 3 | import javax.servlet.http.HttpServletRequest; 4 | 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.web.bind.annotation.RequestMapping; 7 | import org.springframework.web.bind.annotation.RestController; 8 | 9 | import com.zhaxd.common.toolkit.Constant; 10 | import com.zhaxd.core.dto.BootTablePage; 11 | import com.zhaxd.core.model.KUser; 12 | import com.zhaxd.web.service.JobMonitorService; 13 | import com.zhaxd.web.utils.JsonUtils; 14 | 15 | @RestController 16 | @RequestMapping("/job/monitor/") 17 | public class JobMonitorController { 18 | 19 | @Autowired 20 | private JobMonitorService jobMonitorService; 21 | 22 | @RequestMapping("getList.shtml") 23 | public String getList(Integer offset, Integer limit, Integer monitorStatus, Integer categoryId, String jobName, HttpServletRequest request) { 24 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 25 | BootTablePage list = jobMonitorService.getList(offset, limit, monitorStatus,categoryId, jobName, kUser.getuId()); 26 | return JsonUtils.objectToJson(list); 27 | } 28 | 29 | @RequestMapping("getAllMonitorJob.shtml") 30 | public String getAllMonitorJob(HttpServletRequest request) { 31 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 32 | return JsonUtils.objectToJson(jobMonitorService.getAllMonitorJob(kUser.getuId())); 33 | } 34 | 35 | @RequestMapping("getAllSuccess.shtml") 36 | public String getAllSuccess(HttpServletRequest request) { 37 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 38 | return JsonUtils.objectToJson(jobMonitorService.getAllSuccess(kUser.getuId())); 39 | } 40 | 41 | @RequestMapping("getAllFail.shtml") 42 | public String getAllFail(HttpServletRequest request) { 43 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 44 | return JsonUtils.objectToJson(jobMonitorService.getAllFail(kUser.getuId())); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/webapp/static/js/content.js: -------------------------------------------------------------------------------- 1 | var $parentNode = window.parent.document; 2 | 3 | function $childNode(name) { 4 | return window.frames[name] 5 | } 6 | 7 | // tooltips 8 | $('.tooltip-demo').tooltip({ 9 | selector: "[data-toggle=tooltip]", 10 | container: "body" 11 | }); 12 | 13 | // 使用animation.css修改Bootstrap Modal 14 | $('.modal').appendTo("body"); 15 | 16 | $("[data-toggle=popover]").popover(); 17 | 18 | //折叠ibox 19 | $('.collapse-link').click(function () { 20 | var ibox = $(this).closest('div.ibox'); 21 | var button = $(this).find('i'); 22 | var content = ibox.find('div.ibox-content'); 23 | content.slideToggle(200); 24 | button.toggleClass('fa-chevron-up').toggleClass('fa-chevron-down'); 25 | ibox.toggleClass('').toggleClass('border-bottom'); 26 | setTimeout(function () { 27 | ibox.resize(); 28 | ibox.find('[id^=map-]').resize(); 29 | }, 50); 30 | }); 31 | 32 | //关闭ibox 33 | $('.close-link').click(function () { 34 | var content = $(this).closest('div.ibox'); 35 | content.remove(); 36 | }); 37 | 38 | //判断当前页面是否在iframe中 39 | if (top == this) { 40 | var gohome = '
'; 41 | $('body').append(gohome); 42 | } 43 | 44 | //animation.css 45 | function animationHover(element, animation) { 46 | element = $(element); 47 | element.hover( 48 | function () { 49 | element.addClass('animated ' + animation); 50 | }, 51 | function () { 52 | //动画完成之前移除class 53 | window.setTimeout(function () { 54 | element.removeClass('animated ' + animation); 55 | }, 2000); 56 | }); 57 | } 58 | 59 | //拖动面板 60 | function WinMove() { 61 | var element = "[class*=col]"; 62 | var handle = ".ibox-title"; 63 | var connect = "[class*=col]"; 64 | $(element).sortable({ 65 | handle: handle, 66 | connectWith: connect, 67 | tolerance: 'pointer', 68 | forcePlaceholderSize: true, 69 | opacity: 0.8, 70 | }) 71 | .disableSelection(); 72 | }; 73 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/controller/IndexController.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.controller; 2 | 3 | import javax.servlet.http.HttpServletRequest; 4 | import javax.servlet.http.HttpSession; 5 | 6 | import org.apache.commons.lang.StringUtils; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.stereotype.Controller; 9 | import org.springframework.web.bind.annotation.RequestMapping; 10 | import org.springframework.web.bind.annotation.ResponseBody; 11 | import org.springframework.web.servlet.mvc.support.RedirectAttributes; 12 | 13 | import com.zhaxd.common.toolkit.Constant; 14 | import com.zhaxd.core.model.KUser; 15 | import com.zhaxd.web.service.UserService; 16 | import com.zhaxd.web.utils.JsonUtils; 17 | 18 | @Controller 19 | @RequestMapping("/index/") 20 | public class IndexController { 21 | 22 | @Autowired 23 | private UserService userService; 24 | 25 | @RequestMapping("isAdmin.shtml") 26 | @ResponseBody 27 | public String isAdmin(HttpServletRequest request){ 28 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 29 | if (null != kUser && userService.isAdmin(kUser.getuId())){ 30 | return JsonUtils.objectToJson(true); 31 | } 32 | return JsonUtils.objectToJson(false); 33 | } 34 | 35 | @RequestMapping("login.shtml") 36 | public String login(KUser kUser, RedirectAttributes attr, HttpServletRequest request){ 37 | if (null != kUser && StringUtils.isNotBlank(kUser.getuAccount()) && 38 | StringUtils.isNotBlank(kUser.getuPassword())){ 39 | KUser u = userService.login(kUser); 40 | if (null != u){ 41 | request.getSession().setAttribute(Constant.SESSION_ID, u); 42 | return "redirect:/view/indexUI.shtml"; 43 | } 44 | attr.addFlashAttribute("errorMsg", "账号或密码错误"); 45 | return "redirect:/view/loginUI.shtml"; 46 | } 47 | attr.addFlashAttribute("errorMsg", "账号或密码不能为空"); 48 | return "redirect:/view/loginUI.shtml"; 49 | } 50 | 51 | @RequestMapping("logout.shtml") 52 | public String logout(HttpServletRequest request){ 53 | HttpSession session = request.getSession(); 54 | session.removeAttribute(Constant.SESSION_ID); 55 | return "redirect:/view/loginUI.shtml"; 56 | } 57 | } -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/controller/TransMonitorController.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.controller; 2 | 3 | import javax.servlet.http.HttpServletRequest; 4 | 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.web.bind.annotation.RequestMapping; 7 | import org.springframework.web.bind.annotation.RestController; 8 | 9 | import com.zhaxd.common.toolkit.Constant; 10 | import com.zhaxd.core.dto.BootTablePage; 11 | import com.zhaxd.core.model.KUser; 12 | import com.zhaxd.web.service.TransMonitorService; 13 | import com.zhaxd.web.utils.JsonUtils; 14 | 15 | @RestController 16 | @RequestMapping("/trans/monitor/") 17 | public class TransMonitorController { 18 | 19 | @Autowired 20 | private TransMonitorService transMonitorService; 21 | 22 | @RequestMapping("getList.shtml") 23 | public String getList(Integer offset, Integer limit,Integer monitorStatus, Integer categoryId, String transName, HttpServletRequest request) { 24 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 25 | BootTablePage list = transMonitorService.getList(offset, limit, monitorStatus,categoryId, transName, kUser.getuId()); 26 | return JsonUtils.objectToJson(list); 27 | } 28 | 29 | @RequestMapping("getAllMonitorTrans.shtml") 30 | public String getAllMonitorJob(HttpServletRequest request) { 31 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 32 | return JsonUtils.objectToJson(transMonitorService.getAllMonitorTrans(kUser.getuId())); 33 | } 34 | 35 | @RequestMapping("getAllSuccess.shtml") 36 | public String getAllSuccess(HttpServletRequest request) { 37 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 38 | return JsonUtils.objectToJson(transMonitorService.getAllSuccess(kUser.getuId())); 39 | } 40 | 41 | @RequestMapping("getAllFail.shtml") 42 | public String getAllFail(HttpServletRequest request) { 43 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 44 | return JsonUtils.objectToJson(transMonitorService.getAllFail(kUser.getuId())); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/webapp/Html/js/libs/url/cmg.open.url.builder.paipai.js: -------------------------------------------------------------------------------- 1 | var String = java.lang.String; 2 | var StringBuffer = java.lang.StringBuffer; 3 | var Integer = java.lang.Integer; 4 | var Hashtable = java.util.Hashtable; 5 | var Iteractor = java.util.Iteractor; 6 | var TreeMap = java.util.TreeMap; 7 | var Date = java.util.Date; 8 | var Mac = javax.crypto.Mac; 9 | var SecretKeySpec = javax.crypto.spec.SecretKeySpec; 10 | var Base64 = org.apache.commons.codec.binary.Base64; 11 | var URLEncoder = java.net.URLEncoder; 12 | 13 | 14 | function WangGouRESTAPI(treeMap){ 15 | this.ht = treeMap; 16 | } 17 | 18 | WangGouRESTAPI.prototype.put = function (key, value) { 19 | this.ht.put(key, value); 20 | } 21 | 22 | WangGouRESTAPI.prototype.encrypt = function (key, method,queryMethod) { 23 | var orgin = new StringBuffer(); 24 | var map = new TreeMap(); 25 | map.putAll(this.ht); 26 | 27 | var iter = map.keySet().iterator(); 28 | var i = 0; 29 | while (iter.hasNext()) { 30 | var name = String.valueOf(iter.next()); 31 | if (new String(map.get(name)).length() > 0) { 32 | if (i > 0){ 33 | orgin.append("&").append(name).append("=" + map.get(name)); 34 | } else { 35 | orgin.append(name).append("=" + map.get(name)); 36 | i = i + 1; 37 | } 38 | } 39 | } 40 | var param = queryMethod + "&" + encodeURIComponent(method, "UTF-8") + "&" + encodeURIComponent(new String(orgin)); 41 | var signingKey = new SecretKeySpec(new String(key).getBytes("UTF-8"), "HmacSHA1"); 42 | var sha256_HMAC = Mac.getInstance("HmacSHA1"); 43 | sha256_HMAC.init(signingKey); 44 | var sign = sha256_HMAC.doFinal(new String(param).getBytes("UTF-8")); 45 | var signBase64 = new Base64().encodeBase64(sign); 46 | return new String(signBase64, "UTF-8"); 47 | } 48 | 49 | WangGouRESTAPI.prototype.URLEncode = function (ru, rp) { 50 | var request_url = ru; 51 | var request_params = rp; 52 | for (var it = this.ht.entrySet().iterator(); it.hasNext();) { 53 | var e = it.next(); 54 | if (new String(e.getValue()).length() > 0) { 55 | request_params.append("&").append(e.getKey()).append("=").append(encodeURIComponent(e.getValue())); 56 | } 57 | } 58 | 59 | var url = request_url + "?" + new String(request_params.toString().substring(1)); 60 | return url; 61 | } -------------------------------------------------------------------------------- /src/main/webapp/Html/js/libs/url/cmg.open.url.builder.tianpin.js: -------------------------------------------------------------------------------- 1 | var MessageDigest = java.security.MessageDigest; 2 | var String = java.lang.String; 3 | var StringBuffer = java.lang.StringBuffer; 4 | var Integer = java.lang.Integer; 5 | var Hashtable = java.util.Hashtable; 6 | var Iteractor = java.util.Iteractor; 7 | var DecimalFormat = java.text.DecimalFormat; 8 | var URI = org.apache.commons.httpclient.URI; 9 | var TreeMap = java.util.TreeMap; 10 | var Date = java.util.Date; 11 | 12 | function TianpinRESTAPI(treeMap){ 13 | this.ht = treeMap; 14 | } 15 | 16 | TianpinRESTAPI.prototype.put = function (key, value) { 17 | this.ht.put(key, value); 18 | } 19 | 20 | TianpinRESTAPI.prototype.encrypt = function (app_secret) { 21 | var orgin = new StringBuffer(); 22 | //orgin.append(app_secret); 23 | 24 | var map = new TreeMap(); 25 | map.putAll(this.ht); 26 | 27 | var iter = map.keySet().iterator(); 28 | while (iter.hasNext()) { 29 | var name = String.valueOf(iter.next()); 30 | if (new String(map.get(name)).length() > 0) { 31 | orgin.append(name).append(map.get(name)); 32 | } 33 | } 34 | 35 | orgin.append(app_secret); 36 | 37 | // get the md5 digest algorithm 38 | var algorithm = MessageDigest.getInstance("MD5"); 39 | 40 | // get the input as bytes 41 | var bytes = new String(orgin).getBytes("UTF-8"); 42 | 43 | // calculate the digest 44 | algorithm.reset(); 45 | algorithm.update(bytes); 46 | var md5Digest = algorithm.digest(); 47 | 48 | // turn the digest into a hex-string representation 49 | var hexString = new StringBuffer(); 50 | 51 | for (var i = 0; i < md5Digest.length; i++){ 52 | var hex = Integer.toHexString(md5Digest[i] & 0xFF); 53 | if (hex.length() == 1){ 54 | hexString.append('0').append(""); 55 | } 56 | hexString.append(hex); 57 | } 58 | 59 | // write output value 60 | var sign = hexString.toString(); 61 | return sign; 62 | } 63 | 64 | TianpinRESTAPI.prototype.URLEncode = function (ru, rp) { 65 | var request_url = ru; 66 | var request_params = rp; 67 | for (var it = this.ht.entrySet().iterator(); it.hasNext();) { 68 | var e = it.next(); 69 | if (new String(e.getValue()).length() > 0) { 70 | request_params.append("&").append(e.getKey()).append("=").append(e.getValue()); 71 | } 72 | } 73 | var url = request_url + "?" + request_params.toString().substring(1); 74 | 75 | return encodeURI(url); 76 | } -------------------------------------------------------------------------------- /src/main/webapp/Html/js/libs/url/cmg.open.url.builder.yihaodian.js: -------------------------------------------------------------------------------- 1 | var MessageDigest = java.security.MessageDigest; 2 | var String = java.lang.String; 3 | var StringBuffer = java.lang.StringBuffer; 4 | var Integer = java.lang.Integer; 5 | var Hashtable = java.util.Hashtable; 6 | var Iteractor = java.util.Iteractor; 7 | var DecimalFormat = java.text.DecimalFormat; 8 | var URI = org.apache.commons.httpclient.URI; 9 | var TreeMap = java.util.TreeMap; 10 | var Date = java.util.Date; 11 | 12 | function YihaodianRESTAPI(baseURL, treeMap){ 13 | this.baseURL = baseURL; 14 | this.ht = treeMap; 15 | } 16 | 17 | YihaodianRESTAPI.prototype.put = function (key, value) { 18 | this.ht.put(key, value); 19 | } 20 | 21 | YihaodianRESTAPI.prototype.encrypt = function (app_secret) { 22 | var orgin = new StringBuffer(); 23 | orgin.append(app_secret); 24 | 25 | var map = new TreeMap(); 26 | map.putAll(this.ht); 27 | 28 | var iter = map.keySet().iterator(); 29 | while (iter.hasNext()) { 30 | var name = String.valueOf(iter.next()); 31 | if (new String(map.get(name)).length() > 0) { 32 | orgin.append(name).append(map.get(name)); 33 | } 34 | } 35 | 36 | orgin.append(app_secret); 37 | 38 | // get the md5 digest algorithm 39 | var algorithm = MessageDigest.getInstance("MD5"); 40 | 41 | // get the input as bytes 42 | var bytes = new String(orgin).getBytes("UTF-8"); 43 | 44 | // calculate the digest 45 | algorithm.reset(); 46 | algorithm.update(bytes); 47 | var md5Digest = algorithm.digest(); 48 | 49 | // turn the digest into a hex-string representation 50 | var hexString = new StringBuffer(); 51 | 52 | for (var i = 0; i < md5Digest.length; i++){ 53 | if (md5Digest[i] >= 0 && md5Digest[i] < 16) { 54 | hexString.append('0'); 55 | } 56 | hexString.append(Integer.toHexString(md5Digest[i] & 0XFF)); 57 | } 58 | 59 | // write output value 60 | var sign = hexString.toString(); 61 | return sign 62 | } 63 | 64 | YihaodianRESTAPI.prototype.URLEncode = function (rp) { 65 | var request_params = rp; 66 | for (var it = this.ht.entrySet().iterator(); it.hasNext();) { 67 | var e = it.next(); 68 | if (new String(e.getValue()).length() > 0) { 69 | request_params.append("&").append(e.getKey()).append("=").append(e.getValue()); 70 | } 71 | } 72 | var url = this.baseURL + "?" + request_params.toString().substring(1); 73 | 74 | return new URI(url).toString(); 75 | } -------------------------------------------------------------------------------- /src/main/webapp/Html/js/libs/url/cmg.open.url.builder.jd.js: -------------------------------------------------------------------------------- 1 | var MessageDigest = java.security.MessageDigest; 2 | var String = java.lang.String; 3 | var StringBuffer = java.lang.StringBuffer; 4 | var Integer = java.lang.Integer; 5 | var Hashtable = java.util.Hashtable; 6 | var Iteractor = java.util.Iteractor; 7 | var DecimalFormat = java.text.DecimalFormat; 8 | var URI = org.apache.commons.httpclient.URI; 9 | var TreeMap = java.util.TreeMap; 10 | var Date = java.util.Date; 11 | 12 | function JDRESTAPI(treeMap){ 13 | this.ht = treeMap; 14 | } 15 | 16 | JDRESTAPI.prototype.put = function (key, value) { 17 | this.ht.put(key, value); 18 | } 19 | 20 | JDRESTAPI.prototype.encrypt = function (app_secret) { 21 | var orgin = new StringBuffer(); 22 | orgin.append(app_secret); 23 | 24 | var map = new TreeMap(); 25 | map.putAll(this.ht); 26 | 27 | var iter = map.keySet().iterator(); 28 | while (iter.hasNext()) { 29 | var name = String.valueOf(iter.next()); 30 | if (new String(map.get(name)).length() > 0) { 31 | orgin.append(name).append(map.get(name)); 32 | } 33 | } 34 | 35 | orgin.append(app_secret); 36 | 37 | // get the md5 digest algorithm 38 | var algorithm = MessageDigest.getInstance("MD5"); 39 | 40 | // get the input as bytes 41 | var bytes = new String(orgin).getBytes("UTF-8"); 42 | 43 | // calculate the digest 44 | algorithm.reset(); 45 | algorithm.update(bytes); 46 | var md5Digest = algorithm.digest(); 47 | 48 | // turn the digest into a hex-string representation 49 | var hexString = new StringBuffer(); 50 | 51 | for (var i = 0; i < md5Digest.length; i++){ 52 | var hex = Integer.toHexString(md5Digest[i] & 0XFF); 53 | if (hex.length() == 1){ 54 | hexString.append('0').append(""); 55 | } 56 | hexString.append(hex); 57 | } 58 | 59 | // write output value 60 | var sign = hexString.toString().toUpperCase(); 61 | return sign 62 | } 63 | 64 | JDRESTAPI.prototype.URLEncode = function (ru, rp) { 65 | var request_url = ru; 66 | var request_params = rp; 67 | for (var it = this.ht.entrySet().iterator(); it.hasNext();) { 68 | var e = it.next(); 69 | if (new String(e.getValue()).length() > 0) { 70 | request_params.append("&").append(e.getKey()).append("=").append(e.getValue()); 71 | } 72 | } 73 | var url = request_url + "?" + request_params.toString().substring(1); 74 | 75 | return new URI(url).toString(); 76 | } -------------------------------------------------------------------------------- /src/main/webapp/Html/js/libs/url/cmg.open.url.builder.coo8.js: -------------------------------------------------------------------------------- 1 | var MessageDigest = java.security.MessageDigest; 2 | var String = java.lang.String; 3 | var StringBuffer = java.lang.StringBuffer; 4 | var Integer = java.lang.Integer; 5 | var Hashtable = java.util.Hashtable; 6 | var Iteractor = java.util.Iteractor; 7 | var DecimalFormat = java.text.DecimalFormat; 8 | var URI = org.apache.commons.httpclient.URI; 9 | var TreeMap = java.util.TreeMap; 10 | var Date = java.util.Date; 11 | 12 | function Coo8RESTAPI(treeMap){ 13 | this.ht = treeMap; 14 | } 15 | 16 | Coo8RESTAPI.prototype.put = function (key, value) { 17 | this.ht.put(key, value); 18 | } 19 | 20 | Coo8RESTAPI.prototype.encrypt = function (app_secret) { 21 | var orgin = new StringBuffer(); 22 | orgin.append(app_secret); 23 | 24 | var map = new TreeMap(); 25 | map.putAll(this.ht); 26 | 27 | var iter = map.keySet().iterator(); 28 | while (iter.hasNext()) { 29 | var name = String.valueOf(iter.next()); 30 | if (new String(map.get(name)).length() > 0) { 31 | orgin.append(name).append(map.get(name)); 32 | } 33 | } 34 | 35 | orgin.append(app_secret); 36 | 37 | // get the md5 digest algorithm 38 | var algorithm = MessageDigest.getInstance("MD5"); 39 | 40 | // get the input as bytes 41 | var bytes = new String(orgin).getBytes("UTF-8"); 42 | 43 | // calculate the digest 44 | algorithm.reset(); 45 | algorithm.update(bytes); 46 | var md5Digest = algorithm.digest(); 47 | 48 | // turn the digest into a hex-string representation 49 | var hexString = new StringBuffer(); 50 | 51 | for (var i = 0; i < md5Digest.length; i++){ 52 | var hex = Integer.toHexString(md5Digest[i] & 0XFF); 53 | if (hex.length() == 1){ 54 | hexString.append('0').append(""); 55 | } 56 | hexString.append(hex); 57 | } 58 | 59 | // write output value 60 | var sign = hexString.toString().toUpperCase(); 61 | return sign 62 | } 63 | 64 | Coo8RESTAPI.prototype.URLEncode = function (ru, rp) { 65 | var request_url = ru; 66 | var request_params = rp; 67 | for (var it = this.ht.entrySet().iterator(); it.hasNext();) { 68 | var e = it.next(); 69 | if (new String(e.getValue()).length() > 0) { 70 | request_params.append("&").append(e.getKey()).append("=").append(e.getValue()); 71 | } 72 | } 73 | var url = request_url + "?" + request_params.toString().substring(1); 74 | 75 | return new URI(url).toString(); 76 | } -------------------------------------------------------------------------------- /src/main/webapp/Html/js/libs/url/cmg.open.url.builder.ehub.js: -------------------------------------------------------------------------------- 1 | var MessageDigest = java.security.MessageDigest; 2 | var String = java.lang.String; 3 | var StringBuffer = java.lang.StringBuffer; 4 | var Integer = java.lang.Integer; 5 | var Hashtable = java.util.Hashtable; 6 | var Iteractor = java.util.Iteractor; 7 | var DecimalFormat = java.text.DecimalFormat; 8 | var URI = org.apache.commons.httpclient.URI; 9 | var TreeMap = java.util.TreeMap; 10 | var Date = java.util.Date; 11 | 12 | function EHubRESTAPI(treeMap){ 13 | this.ht = treeMap; 14 | } 15 | 16 | EHubRESTAPI.prototype.put = function (key, value) { 17 | this.ht.put(key, value); 18 | } 19 | 20 | EHubRESTAPI.prototype.encrypt = function (app_secret) { 21 | var orgin = new StringBuffer(); 22 | orgin.append(app_secret); 23 | 24 | var map = new TreeMap(); 25 | map.putAll(this.ht); 26 | 27 | var iter = map.keySet().iterator(); 28 | while (iter.hasNext()) { 29 | var name = String.valueOf(iter.next()); 30 | if (new String(map.get(name)).length() > 0) { 31 | orgin.append(name).append(map.get(name)); 32 | } 33 | } 34 | 35 | orgin.append(app_secret); 36 | 37 | // get the md5 digest algorithm 38 | var algorithm = MessageDigest.getInstance("MD5"); 39 | 40 | // get the input as bytes 41 | var bytes = new String(orgin).getBytes("UTF-8"); 42 | 43 | // calculate the digest 44 | algorithm.reset(); 45 | algorithm.update(bytes); 46 | var md5Digest = algorithm.digest(); 47 | 48 | // turn the digest into a hex-string representation 49 | var hexString = new StringBuffer(); 50 | 51 | for (var i = 0; i < md5Digest.length; i++){ 52 | var hex = Integer.toHexString(md5Digest[i] & 0XFF); 53 | if (hex.length() == 1){ 54 | hexString.append('0').append(""); 55 | } 56 | hexString.append(hex); 57 | } 58 | 59 | // write output value 60 | var sign = hexString.toString().toUpperCase(); 61 | return sign 62 | } 63 | 64 | EHubRESTAPI.prototype.URLEncode = function (ru, rp) { 65 | var request_url = ru; 66 | var request_params = rp; 67 | for (var it = this.ht.entrySet().iterator(); it.hasNext();) { 68 | var e = it.next(); 69 | if (new String(e.getValue()).length() > 0) { 70 | request_params.append("&").append(e.getKey()).append("=").append(e.getValue()); 71 | } 72 | } 73 | var url = request_url + "?" + request_params.toString().substring(1); 74 | 75 | return new URI(url).toString(); 76 | } -------------------------------------------------------------------------------- /src/main/webapp/static/lib/bootstrap-fileinput/themes/gly/theme.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * bootstrap-fileinput v4.4.2 3 | * http://plugins.krajee.com/file-input 4 | * 5 | * Glyphicon (default) theme configuration for bootstrap-fileinput. 6 | * 7 | * Author: Kartik Visweswaran 8 | * Copyright: 2014 - 2017, Kartik Visweswaran, Krajee.com 9 | * 10 | * Licensed under the BSD 3-Clause 11 | * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md 12 | */ 13 | (function ($) { 14 | "use strict"; 15 | 16 | $.fn.fileinputThemes.gly = { 17 | fileActionSettings: { 18 | removeIcon: '', 19 | uploadIcon: '', 20 | zoomIcon: '', 21 | dragIcon: '', 22 | indicatorNew: '', 23 | indicatorSuccess: '', 24 | indicatorError: '', 25 | indicatorLoading: '' 26 | }, 27 | layoutTemplates: { 28 | fileIcon: '' 29 | }, 30 | previewZoomButtonIcons: { 31 | prev: '', 32 | next: '', 33 | toggleheader: '', 34 | fullscreen: '', 35 | borderless: '', 36 | close: '' 37 | }, 38 | previewFileIcon: '', 39 | browseIcon: ' ', 40 | removeIcon: '', 41 | cancelIcon: '', 42 | uploadIcon: '', 43 | msgValidationErrorIcon: ' ' 44 | }; 45 | })(window.jQuery); 46 | -------------------------------------------------------------------------------- /src/main/webapp/static/js/my/quartz-add.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | $("#quartzCron").cronGen({ 3 | direction : 'left' 4 | }); 5 | }); 6 | $.validator.setDefaults({ 7 | highlight: function (element) { 8 | $(element).closest('.form-group').removeClass('has-success').addClass('has-error'); 9 | }, 10 | success: function (element) { 11 | $(element).closest('.form-group').removeClass('has-error').addClass('has-success'); 12 | }, 13 | errorElement: "span", 14 | errorPlacement: function (error, element) { 15 | if (element.is(":radio") || element.is(":checkbox")) { 16 | error.appendTo(element.parent().parent().parent()); 17 | }else if(element.is("#cQuarz")){ 18 | error.appendTo(element.parent().parent()); 19 | } else { 20 | error.appendTo(element.parent()); 21 | } 22 | }, 23 | errorClass: "help-block m-b-none", 24 | validClass: "help-block m-b-none" 25 | }); 26 | $().ready(function () { 27 | var icon = " "; 28 | $("#QuartzForm").validate({ 29 | rules: { 30 | quartzDescription: { 31 | required: true 32 | }, 33 | cQuarz: { 34 | required: true 35 | } 36 | }, 37 | messages: { 38 | quartzDescription: { 39 | required: icon + "请输入执行策略名称" 40 | }, 41 | cQuarz: { 42 | required: icon + "请选择cron编码" 43 | } 44 | }, 45 | submitHandler: function (form) { 46 | $("#quartzCron").val($("#cQuarz").val()); 47 | $.post("quartz/insert.shtml", decodeURIComponent($(form).serialize(), true), function (data) { 48 | var result = JSON.parse(data); 49 | if (result.status == "success") { 50 | layer.msg('添加成功', { 51 | time: 2000, 52 | icon: 6 53 | }); 54 | setTimeout(function () { 55 | location.href = "view/quartz/listUI.shtml"; 56 | }, 2000); 57 | } else { 58 | layer.msg(result.message, {icon: 2}); 59 | } 60 | }); 61 | } 62 | }); 63 | }); 64 | var cancel = function(){ 65 | location.href = "view/quartz/listUI.shtml"; 66 | } -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/controller/QuartzController.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.controller; 2 | 3 | import javax.servlet.http.HttpServletRequest; 4 | 5 | import com.zhaxd.core.dto.BootTablePage; 6 | import com.zhaxd.core.dto.ResultDto; 7 | import com.zhaxd.core.model.KQuartz; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.web.bind.annotation.RequestMapping; 10 | import org.springframework.web.bind.annotation.RestController; 11 | 12 | import com.zhaxd.common.toolkit.Constant; 13 | import com.zhaxd.core.model.KUser; 14 | import com.zhaxd.web.service.QuartzService; 15 | import com.zhaxd.web.utils.JsonUtils; 16 | 17 | @RestController 18 | @RequestMapping("/quartz/") 19 | public class QuartzController { 20 | 21 | @Autowired 22 | private QuartzService quartzService; 23 | 24 | @RequestMapping("getSimpleList.shtml") 25 | public String simpleList(HttpServletRequest request){ 26 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 27 | return JsonUtils.objectToJson(quartzService.getList(kUser.getuId())); 28 | } 29 | @RequestMapping("getQuartz.shtml") 30 | public String getQuartz(Integer quartzId){ 31 | return ResultDto.success(quartzService.getQuartz(quartzId)); 32 | } 33 | 34 | @RequestMapping("getList.shtml") 35 | public String getList(Integer offset, Integer limit, HttpServletRequest request){ 36 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 37 | BootTablePage list = quartzService.getList(offset, limit, kUser.getuId()); 38 | return JsonUtils.objectToJson(list); 39 | } 40 | @RequestMapping("insert.shtml") 41 | public String insert(KQuartz kQuartz, HttpServletRequest request){ 42 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 43 | quartzService.insert(kQuartz, kUser.getuId()); 44 | return ResultDto.success(); 45 | } 46 | @RequestMapping("delete.shtml") 47 | public String delete(Integer quartzId){ 48 | quartzService.delete(quartzId); 49 | return ResultDto.success(); 50 | } 51 | @RequestMapping("update.shtml") 52 | public String update(KQuartz kQuartz, HttpServletRequest request){ 53 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 54 | try{ 55 | quartzService.update(kQuartz, kUser.getuId()); 56 | return ResultDto.success(); 57 | }catch(Exception e){ 58 | return ResultDto.success(e.toString()); 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/main/webapp/static/css/login.css: -------------------------------------------------------------------------------- 1 | html{height: 100%;} 2 | body.signin { 3 | background: #18c8f6; 4 | height: auto; 5 | background:url("../img/login-background.jpg") no-repeat center fixed; 6 | -webkit-background-size: cover; 7 | -moz-background-size: cover; 8 | -o-background-size: cover; 9 | background-size: cover; 10 | color: rgba(255,255,255,.95); 11 | } 12 | 13 | .signinpanel { 14 | width: 750px; 15 | margin: 10% auto 0 auto; 16 | } 17 | 18 | .signinpanel .logopanel { 19 | float: none; 20 | width: auto; 21 | padding: 0; 22 | background: none; 23 | } 24 | 25 | .signinpanel .signin-info ul { 26 | list-style: none; 27 | padding: 0; 28 | margin: 20px 0; 29 | } 30 | 31 | .signinpanel .form-control { 32 | display: block; 33 | margin-top: 15px; 34 | } 35 | 36 | .signinpanel .uname { 37 | background: #fff url(../img/user.png) no-repeat 95% center;color:#333; 38 | } 39 | 40 | .signinpanel .pword { 41 | background: #fff url(../img/locked.png) no-repeat 95% center;color:#333; 42 | } 43 | 44 | .signinpanel .btn { 45 | margin-top: 15px; 46 | } 47 | 48 | .signinpanel form { 49 | background: rgba(255, 255, 255, 0.2); 50 | border: 1px solid rgba(255,255,255,.3); 51 | -moz-box-shadow: 0 3px 0 rgba(12, 12, 12, 0.03); 52 | -webkit-box-shadow: 0 3px 0 rgba(12, 12, 12, 0.03); 53 | box-shadow: 0 3px 0 rgba(12, 12, 12, 0.03); 54 | -moz-border-radius: 3px; 55 | -webkit-border-radius: 3px; 56 | border-radius: 3px; 57 | padding: 30px; 58 | } 59 | 60 | .signup-footer{border-top: solid 1px rgba(255,255,255,.3);margin:20px 0;padding-top: 15px;} 61 | 62 | @media screen and (max-width: 768px) { 63 | .signinpanel, 64 | .signuppanel { 65 | margin: 0 auto; 66 | width: 420px!important; 67 | padding: 20px; 68 | } 69 | .signinpanel form { 70 | margin-top: 20px; 71 | } 72 | .signup-footer { 73 | margin-bottom: 10px; 74 | } 75 | .signuppanel .form-control { 76 | margin-bottom: 10px; 77 | } 78 | .signup-footer .pull-left, 79 | .signup-footer .pull-right { 80 | float: none !important; 81 | text-align: center; 82 | } 83 | .signinpanel .signin-info ul { 84 | display: none; 85 | } 86 | } 87 | @media screen and (max-width: 320px) { 88 | .signinpanel, 89 | .signuppanel { 90 | margin:0 20px; 91 | width:auto; 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /src/main/webapp/Html/js/libs/url/cmg.open.url.builder.dangdang.js: -------------------------------------------------------------------------------- 1 | var MessageDigest = java.security.MessageDigest; 2 | var String = java.lang.String; 3 | var StringBuffer = java.lang.StringBuffer; 4 | var Integer = java.lang.Integer; 5 | var Hashtable = java.util.Hashtable; 6 | var Iteractor = java.util.Iteractor; 7 | var DecimalFormat = java.text.DecimalFormat; 8 | var URI = org.apache.commons.httpclient.URI; 9 | var TreeMap = java.util.TreeMap; 10 | var Date = java.util.Date; 11 | 12 | function DangDangRESTAPI(baseURL, method, treeMap){ 13 | this.baseURL = baseURL; 14 | this.method = method; 15 | this.ht = treeMap; 16 | } 17 | 18 | DangDangRESTAPI.prototype.put = function (key, value) { 19 | this.ht.put(key, value); 20 | } 21 | 22 | DangDangRESTAPI.prototype.encrypt = function (app_secret) { 23 | var orgin = new StringBuffer(); 24 | 25 | var map = new TreeMap(); 26 | map.putAll(this.ht); 27 | 28 | //append value for each key 29 | var iter = map.keySet().iterator(); 30 | while (iter.hasNext()) { 31 | var name = String.valueOf(iter.next()); 32 | if (new String(map.get(name)).length() > 0) { 33 | orgin.append(map.get(name)); 34 | } 35 | } 36 | 37 | orgin.append(app_secret); 38 | 39 | // get the md5 digest algorithm 40 | var algorithm = MessageDigest.getInstance("MD5"); 41 | 42 | // get the input as bytes 43 | var bytes = new String(orgin).getBytes("UTF-8"); 44 | 45 | // calculate the digest 46 | algorithm.reset(); 47 | algorithm.update(bytes); 48 | var md5Digest = algorithm.digest(); 49 | 50 | // turn the digest into a hex-string representation 51 | var hexString = new StringBuffer(); 52 | 53 | for (var i = 0; i < md5Digest.length; i++){ 54 | var hex = Integer.toHexString(md5Digest[i] & 0XFF); 55 | if (hex.length() == 1){ 56 | hexString.append('0').append(""); 57 | } 58 | hexString.append(hex); 59 | } 60 | 61 | // write output value 62 | var sign = hexString.toString(); 63 | return sign 64 | } 65 | 66 | DangDangRESTAPI.prototype.URLEncode = function (rp) { 67 | var request_params = rp; 68 | for (var it = this.ht.entrySet().iterator(); it.hasNext();) { 69 | var e = it.next(); 70 | if (new String(e.getValue()).length() > 0) { 71 | request_params.append("&").append(e.getKey()).append("=").append(e.getValue()); 72 | } 73 | } 74 | var url = this.baseURL + "/" + this.method + ".php?" + request_params.toString().substring(1); 75 | 76 | return new URI(url).toString(); 77 | } -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/controller/UserController.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.controller; 2 | 3 | import com.zhaxd.common.toolkit.Constant; 4 | import com.zhaxd.core.model.KUser; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.web.bind.annotation.RequestMapping; 7 | import org.springframework.web.bind.annotation.RestController; 8 | 9 | import com.zhaxd.core.dto.ResultDto; 10 | import com.zhaxd.web.service.UserService; 11 | import com.zhaxd.web.utils.JsonUtils; 12 | 13 | import javax.servlet.http.HttpServletRequest; 14 | import javax.servlet.http.HttpServletResponse; 15 | import java.io.IOException; 16 | 17 | @RestController 18 | @RequestMapping("/user/") 19 | public class UserController { 20 | 21 | @Autowired 22 | private UserService userService; 23 | 24 | @RequestMapping("getList.shtml") 25 | public String getList(Integer offset, Integer limit){ 26 | return JsonUtils.objectToJson(userService.getList(offset, limit)); 27 | } 28 | 29 | @RequestMapping("delete.shtml") 30 | public String delete(Integer uId){ 31 | userService.delete(uId); 32 | return ResultDto.success(); 33 | } 34 | 35 | @RequestMapping("resetPassword.shtml") 36 | public String resetPassword(){ 37 | 38 | return ResultDto.success(); 39 | } 40 | @RequestMapping("insert.shtml") 41 | public String insert(KUser kNewUser, HttpServletRequest request){ 42 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 43 | userService.insert(kNewUser, kUser.getuId()); 44 | return ResultDto.success(); 45 | } 46 | @RequestMapping("IsAccountExist.shtml") 47 | public void IsAccountExist(String uAccount, HttpServletResponse response) { 48 | try { 49 | if (userService.IsAccountExist(uAccount)) { 50 | response.getWriter().write("false"); 51 | } else { 52 | response.getWriter().write("true"); 53 | } 54 | } catch (IOException e) { 55 | e.printStackTrace(); 56 | } 57 | } 58 | @RequestMapping("getUser.shtml") 59 | public String getQuartz(Integer uId){ 60 | return ResultDto.success(userService.getUser(uId)); 61 | } 62 | @RequestMapping("update.shtml") 63 | public String update(KUser kUser, HttpServletRequest request){ 64 | KUser kLoginUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 65 | try{ 66 | userService.update(kUser, kLoginUser.getuId()); 67 | return ResultDto.success(); 68 | }catch(Exception e){ 69 | return ResultDto.success(e.toString()); 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /src/main/webapp/Html/js/libs/url/cmg.open.url.builder.amazon.js: -------------------------------------------------------------------------------- 1 | var String = java.lang.String; 2 | var StringBuffer = java.lang.StringBuffer; 3 | var Integer = java.lang.Integer; 4 | var Hashtable = java.util.Hashtable; 5 | var Iteractor = java.util.Iteractor; 6 | var TreeMap = java.util.TreeMap; 7 | var Date = java.util.Date; 8 | var Mac = javax.crypto.Mac; 9 | var SecretKeySpec = javax.crypto.spec.SecretKeySpec; 10 | var Base64 = org.apache.commons.codec.binary.Base64; 11 | var URLEncoder = java.net.URLEncoder; 12 | 13 | 14 | function AmazonRESTAPI(treeMap){ 15 | this.ht = treeMap; 16 | } 17 | 18 | AmazonRESTAPI.prototype.put = function (key, value) { 19 | this.ht.put(key, value); 20 | } 21 | 22 | AmazonRESTAPI.prototype.encrypt = function (url, method, version, app_secret) { 23 | var orgin = new StringBuffer(); 24 | orgin.append("POST\n"); 25 | orgin.append(url+"\n"); 26 | orgin.append("/"+method+"/"+version+"\n"); 27 | 28 | 29 | var map = new TreeMap(); 30 | map.putAll(this.ht); 31 | 32 | var iter = map.keySet().iterator(); 33 | var i = 0; 34 | while (iter.hasNext()) { 35 | var name = String.valueOf(iter.next()); 36 | if (new String(map.get(name)).length() > 0) { 37 | if (i > 0){ 38 | orgin.append("&").append(name).append("=" + URLEncoder.encode(map.get(name),"utf-8")); 39 | } else { 40 | orgin.append(name).append("=" + URLEncoder.encode(map.get(name),"utf-8")); 41 | i = i + 1; 42 | } 43 | } 44 | } 45 | //Alert(new String(orgin)); 46 | //var sign = CryptoJS.HmacSHA256("abc", "dJ9CtVeqWTKXsnqzavUf+AQTOnRqA+0EzPVWN2t1"); 47 | //Alert(new String(app_secret)); 48 | var sha256_HMAC = Mac.getInstance("HmacSHA256"); 49 | var secret_key = new SecretKeySpec(new String(app_secret).getBytes(), new String("HmacSHA256")); 50 | sha256_HMAC.init(secret_key); 51 | var sign = sha256_HMAC.doFinal(new String(orgin).getBytes()); 52 | 53 | var signBase64 = new Base64().encodeBase64(new String(sign).getBytes()); 54 | 55 | return new String(signBase64); 56 | } 57 | 58 | AmazonRESTAPI.prototype.URLEncode = function (ru, rp) { 59 | var request_url = ru; 60 | var request_params = rp; 61 | for (var it = this.ht.entrySet().iterator(); it.hasNext();) { 62 | var e = it.next(); 63 | if (new String(e.getValue()).length() > 0) { 64 | request_params.append("&").append(e.getKey()).append("=").append(URLEncoder.encode(e.getValue(),"utf-8")); 65 | } 66 | } 67 | var url = request_url + "?" + request_params.toString().substring(1); 68 | return url; 69 | } -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | master 8 | 9 | index.html 10 | 11 | 12 | 13 | 14 | contextConfigLocation 15 | classpath:spring/applicationContext-*.xml 16 | 17 | 18 | org.springframework.web.context.ContextLoaderListener 19 | 20 | 21 | 22 | 23 | CharacterEncodingFilter 24 | org.springframework.web.filter.CharacterEncodingFilter 25 | 26 | encoding 27 | utf-8 28 | 29 | 30 | 31 | CharacterEncodingFilter 32 | /* 33 | 34 | 35 | 36 | 37 | customer 38 | org.springframework.web.servlet.DispatcherServlet 39 | 40 | contextConfigLocation 41 | classpath:spring/spring-mvc.xml 42 | 43 | 44 | 45 | customer 46 | *.shtml 47 | 48 | 49 | 50 | 51 | 52 | log4jConfigLocation 53 | classpath:log4j.properties 54 | 55 | 56 | 57 | 58 | log4jRefreshInterval 59 | 10000 60 | 61 | 62 | 63 | 64 | org.springframework.web.util.Log4jConfigListener 65 | 66 | 67 | 68 | 69 | webAppRootKey 70 | km 71 | 72 | -------------------------------------------------------------------------------- /src/main/resources/spring/spring-mvc.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | text/plain;charset=UTF-8 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/dto/web/KRepositoryDto.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.dto.web; 2 | 3 | public class KRepositoryDto { 4 | 5 | //资源库数据库访问模式("Native", "ODBC", "OCI", "Plugin", "JNDI") 6 | private String databaseAccess; 7 | //资源库数据库主机名或者IP地址 8 | private String databaseHost; 9 | //资源库数据库名称 10 | private String databaseName; 11 | //数据库登录密码 12 | private String databasePassword; 13 | //资源库数据库端口号 14 | private String databasePort; 15 | //数据库登录账号 16 | private String databaseUsername; 17 | //资源库名称 18 | private String repositoryName; 19 | //登录密码 20 | private String repositoryPassword; 21 | //资源库数据库类型(MYSQL、ORACLE) 22 | private String repositoryType; 23 | //登录用户名 24 | private String repositoryUsername; 25 | 26 | public String getDatabaseAccess() { 27 | return databaseAccess; 28 | } 29 | public void setDatabaseAccess(String databaseAccess) { 30 | this.databaseAccess = databaseAccess; 31 | } 32 | public String getDatabaseHost() { 33 | return databaseHost; 34 | } 35 | public void setDatabaseHost(String databaseHost) { 36 | this.databaseHost = databaseHost; 37 | } 38 | public String getDatabaseName() { 39 | return databaseName; 40 | } 41 | public void setDatabaseName(String databaseName) { 42 | this.databaseName = databaseName; 43 | } 44 | public String getDatabasePassword() { 45 | return databasePassword; 46 | } 47 | public void setDatabasePassword(String databasePassword) { 48 | this.databasePassword = databasePassword; 49 | } 50 | public String getDatabasePort() { 51 | return databasePort; 52 | } 53 | public void setDatabasePort(String databasePort) { 54 | this.databasePort = databasePort; 55 | } 56 | public String getDatabaseUsername() { 57 | return databaseUsername; 58 | } 59 | public void setDatabaseUsername(String databaseUsername) { 60 | this.databaseUsername = databaseUsername; 61 | } 62 | public String getRepositoryName() { 63 | return repositoryName; 64 | } 65 | public void setRepositoryName(String repositoryName) { 66 | this.repositoryName = repositoryName; 67 | } 68 | public String getRepositoryPassword() { 69 | return repositoryPassword; 70 | } 71 | public void setRepositoryPassword(String repositoryPassword) { 72 | this.repositoryPassword = repositoryPassword; 73 | } 74 | public String getRepositoryType() { 75 | return repositoryType; 76 | } 77 | public void setRepositoryType(String repositoryType) { 78 | this.repositoryType = repositoryType; 79 | } 80 | public String getRepositoryUsername() { 81 | return repositoryUsername; 82 | } 83 | public void setRepositoryUsername(String repositoryUsername) { 84 | this.repositoryUsername = repositoryUsername; 85 | } 86 | } -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/utils/JsonUtils.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.utils; 2 | 3 | import java.text.SimpleDateFormat; 4 | import java.util.List; 5 | 6 | import com.fasterxml.jackson.core.JsonProcessingException; 7 | import com.fasterxml.jackson.databind.JavaType; 8 | import com.fasterxml.jackson.databind.ObjectMapper; 9 | 10 | /** 11 | * json工具类 12 | * @author gongym 13 | */ 14 | public class JsonUtils { 15 | 16 | // 定义jackson对象 17 | private static final ObjectMapper MAPPER = new ObjectMapper(); 18 | /** 19 | * 序列化中的时间格式化 20 | */ 21 | private static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; 22 | 23 | /** 24 | * 将对象转换成json字符串。 25 | *

Title: pojoToJson

26 | *

Description:

27 | * @param data 28 | * @return 29 | */ 30 | public static String objectToJson(Object data) { 31 | try { 32 | MAPPER.setDateFormat(new SimpleDateFormat(DEFAULT_DATE_FORMAT)); 33 | return MAPPER.writeValueAsString(data); 34 | } catch (JsonProcessingException e) { 35 | e.printStackTrace(); 36 | } 37 | return null; 38 | } 39 | 40 | /** 41 | * @Title: objectToJson 42 | * @Description: 自定义事件格式化的JSON转换 43 | * @param data 44 | * @param dateFormat 45 | * @return String 46 | * @throws 47 | */ 48 | public static String objectToJson(Object data, String dateFormat) { 49 | try { 50 | MAPPER.setDateFormat(new SimpleDateFormat(dateFormat)); 51 | return MAPPER.writeValueAsString(data); 52 | } catch (JsonProcessingException e) { 53 | e.printStackTrace(); 54 | } 55 | return null; 56 | } 57 | 58 | /** 59 | * 将json结果集转化为对象 60 | * 61 | * @param jsonData json数据 62 | * @param clazz 对象中的object类型 63 | * @return 64 | */ 65 | public static T jsonToPojo(String jsonData, Class beanType) { 66 | try { 67 | return MAPPER.readValue(jsonData, beanType); 68 | } catch (Exception e) { 69 | e.printStackTrace(); 70 | } 71 | return null; 72 | } 73 | 74 | /** 75 | * 将json数据转换成pojo对象list 76 | *

Title: jsonToList

77 | *

Description:

78 | * @param jsonData 79 | * @param beanType 80 | * @return 81 | */ 82 | public static List jsonToList(String jsonData, Class beanType) { 83 | JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType); 84 | try { 85 | return MAPPER.readValue(jsonData, javaType); 86 | } catch (Exception e) { 87 | e.printStackTrace(); 88 | } 89 | return null; 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/controller/DownLoadRecordController.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.controller; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | 6 | import org.apache.commons.io.FileUtils; 7 | import org.apache.commons.lang.StringUtils; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.http.HttpHeaders; 10 | import org.springframework.http.HttpStatus; 11 | import org.springframework.http.MediaType; 12 | import org.springframework.http.ResponseEntity; 13 | import org.springframework.stereotype.Controller; 14 | import org.springframework.web.bind.annotation.RequestMapping; 15 | 16 | import com.zhaxd.core.mapper.KJobRecordDao; 17 | import com.zhaxd.core.mapper.KTransRecordDao; 18 | import com.zhaxd.core.model.KJobRecord; 19 | import com.zhaxd.core.model.KTransRecord; 20 | 21 | @Controller 22 | @RequestMapping("/download/") 23 | public class DownLoadRecordController { 24 | 25 | @Autowired 26 | private KJobRecordDao kJobRecordDao; 27 | 28 | @Autowired 29 | private KTransRecordDao kTransRecordDao; 30 | 31 | @RequestMapping("job/record.shtml") 32 | public ResponseEntity jobRecord(Integer recordId){ 33 | KJobRecord kJobRecord = kJobRecordDao.unique(recordId); 34 | String logFilePath = kJobRecord.getLogFilePath(); 35 | HttpHeaders headers = new HttpHeaders(); 36 | String fileName = logFilePath.substring(StringUtils.lastIndexOf(logFilePath, "/") + 1, logFilePath.length()); 37 | try { 38 | byte[] logFileBytes = FileUtils.readFileToByteArray(new File(logFilePath)); 39 | String downFileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1"); 40 | headers.setContentDispositionFormData("attachment", downFileName); 41 | headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); 42 | return new ResponseEntity(logFileBytes, headers, HttpStatus.CREATED); 43 | } catch (IOException e) { 44 | e.printStackTrace(); 45 | return null; 46 | } 47 | } 48 | 49 | @RequestMapping("trans/record.shtml") 50 | public ResponseEntity transRecord(Integer recordId){ 51 | KTransRecord kTransRecord = kTransRecordDao.unique(recordId); 52 | String logFilePath = kTransRecord.getLogFilePath(); 53 | HttpHeaders headers = new HttpHeaders(); 54 | String fileName = logFilePath.substring(StringUtils.lastIndexOf(logFilePath, "/") + 1, logFilePath.length()); 55 | try { 56 | byte[] logFileBytes = FileUtils.readFileToByteArray(new File(logFilePath)); 57 | String downFileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1"); 58 | headers.setContentDispositionFormData("attachment", downFileName); 59 | headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); 60 | return new ResponseEntity(logFileBytes, headers, HttpStatus.CREATED); 61 | } catch (IOException e) { 62 | e.printStackTrace(); 63 | return null; 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/main/webapp/static/lib/bootstrap-fileinput/themes/explorer/theme.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * bootstrap-fileinput v4.4.2 3 | * http://plugins.krajee.com/file-input 4 | * 5 | * Krajee Explorer theme configuration for bootstrap-fileinput. Load this theme file after loading `fileinput.js`. 6 | * 7 | * Author: Kartik Visweswaran 8 | * Copyright: 2014 - 2017, Kartik Visweswaran, Krajee.com 9 | * 10 | * Licensed under the BSD 3-Clause 11 | * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md 12 | */ 13 | (function ($) { 14 | "use strict"; 15 | var teTagBef = '\n' + 20 | ' {close}' + 21 | '
\n' + 22 | ' \n' + 23 | '
\n' + 24 | '
' + 25 | '
\n' + 26 | '
\n' + 27 | '
\n' + 28 | '', 29 | footer: '
{caption}
' + 30 | '{size}{progress}{indicator} {actions}', 31 | actions: '{drag}\n' + 32 | '
\n' + 33 | ' \n' + 36 | '
', 37 | zoomCache: '' + 38 | '{zoomContent}
' 39 | }, 40 | previewMarkupTags: { 41 | tagBefore1: teTagBef + '>' + teContent, 42 | tagBefore2: teTagBef + ' title="{caption}">' + teContent, 43 | tagAfter: '\n{footer}\n' 44 | }, 45 | previewSettings: { 46 | image: {height: "60px"}, 47 | html: {width: "100px", height: "60px"}, 48 | text: {width: "100px", height: "60px"}, 49 | video: {width: "auto", height: "60px"}, 50 | audio: {width: "auto", height: "60px"}, 51 | flash: {width: "100%", height: "60px"}, 52 | object: {width: "100%", height: "60px"}, 53 | pdf: {width: "100px", height: "60px"}, 54 | other: {width: "100%", height: "60px"} 55 | }, 56 | frameClass: 'explorer-frame' 57 | }; 58 | })(window.jQuery); 59 | -------------------------------------------------------------------------------- /src/main/webapp/static/js/plugins/layer/skin/layer.ext.css: -------------------------------------------------------------------------------- 1 | /*! 2 | 3 | @Name: layer拓展样式 4 | @Date: 2012.12.13 5 | @Author: 贤心 6 | @blog: sentsin.com 7 | 8 | */.layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span{text-overflow:ellipsis;white-space:nowrap}.layui-layer-iconext{background:url(default/icon-ext.png) no-repeat}html #layui_layer_skinlayerextcss{display:none;position:absolute;width:1989px}.layui-layer-prompt .layui-layer-input{display:block;width:220px;height:30px;margin:0 auto;line-height:30px;padding:0 5px;border:1px solid #ccc;box-shadow:1px 1px 5px rgba(0,0,0,.1) inset;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;border-bottom:1px solid #ccc;background-color:#eee;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;cursor:default;overflow:hidden}.layui-layer-tab .layui-layer-title span.layui-layer-tabnow{height:43px;border-left:1px solid #ccc;border-right:1px solid #ccc;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.xubox_tab_layer{display:block}.xubox_tabclose{position:absolute;right:10px;top:5px;cursor:pointer}.layui-layer-photos{-webkit-animation-duration:1s;animation-duration:1s;background:url(default/xubox_loading1.gif) center center no-repeat #000}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal} 9 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/model/KUser.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.model; 2 | 3 | import org.beetl.sql.core.annotatoin.SeqID; 4 | 5 | import java.util.Date; 6 | 7 | public class KUser { 8 | //用户ID 9 | @SeqID(name="USER_ID_SEQ") 10 | private Integer uId ; 11 | //添加者 12 | private Integer addUser ; 13 | //是否删除(1:存在;0:删除) 14 | private Integer delFlag ; 15 | //编辑者 16 | private Integer editUser ; 17 | //用户账号 18 | private String uAccount ; 19 | //用户邮箱 20 | private String uEmail ; 21 | //用户昵称 22 | private String uNickname ; 23 | //用户密码 24 | private String uPassword ; 25 | //用于电话 26 | private String uPhone ; 27 | //添加时间 28 | private Date addTime ; 29 | //编辑时间 30 | private Date editTime ; 31 | 32 | public KUser() { 33 | } 34 | 35 | public Integer getuId(){ 36 | return uId; 37 | } 38 | public void setuId(Integer uId ){ 39 | this.uId = uId; 40 | } 41 | 42 | public Integer getAddUser(){ 43 | return addUser; 44 | } 45 | public void setAddUser(Integer addUser ){ 46 | this.addUser = addUser; 47 | } 48 | 49 | public Integer getDelFlag(){ 50 | return delFlag; 51 | } 52 | public void setDelFlag(Integer delFlag ){ 53 | this.delFlag = delFlag; 54 | } 55 | 56 | public Integer getEditUser(){ 57 | return editUser; 58 | } 59 | public void setEditUser(Integer editUser ){ 60 | this.editUser = editUser; 61 | } 62 | 63 | public String getuAccount(){ 64 | return uAccount; 65 | } 66 | public void setuAccount(String uAccount ){ 67 | this.uAccount = uAccount; 68 | } 69 | 70 | public String getuEmail(){ 71 | return uEmail; 72 | } 73 | public void setuEmail(String uEmail ){ 74 | this.uEmail = uEmail; 75 | } 76 | 77 | public String getuNickname(){ 78 | return uNickname; 79 | } 80 | public void setuNickname(String uNickname ){ 81 | this.uNickname = uNickname; 82 | } 83 | 84 | public String getuPassword(){ 85 | return uPassword; 86 | } 87 | public void setuPassword(String uPassword ){ 88 | this.uPassword = uPassword; 89 | } 90 | 91 | public String getuPhone(){ 92 | return uPhone; 93 | } 94 | public void setuPhone(String uPhone ){ 95 | this.uPhone = uPhone; 96 | } 97 | 98 | public Date getAddTime(){ 99 | return addTime; 100 | } 101 | public void setAddTime(Date addTime ){ 102 | this.addTime = addTime; 103 | } 104 | 105 | public Date getEditTime(){ 106 | return editTime; 107 | } 108 | public void setEditTime(Date editTime ){ 109 | this.editTime = editTime; 110 | } 111 | 112 | @Override 113 | public String toString() { 114 | return "KUser [uId=" + uId + ", addUser=" + addUser + ", delFlag=" + delFlag + ", editUser=" + editUser 115 | + ", uAccount=" + uAccount + ", uEmail=" + uEmail + ", uNickname=" + uNickname + ", uPassword=" 116 | + uPassword + ", uPhone=" + uPhone + ", addTime=" + addTime + ", editTime=" + editTime + "]"; 117 | } 118 | } -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/service/CategoryService.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.service; 2 | 3 | import com.zhaxd.core.dto.BootTablePage; 4 | import com.zhaxd.core.mapper.KCategoryDao; 5 | import com.zhaxd.core.model.KCategory; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Service; 8 | 9 | import java.util.ArrayList; 10 | import java.util.Date; 11 | import java.util.List; 12 | 13 | @Service 14 | public class CategoryService { 15 | @Autowired 16 | private KCategoryDao kCategoryDao; 17 | 18 | public List getList(Integer uId){ 19 | List resultList = new ArrayList(); 20 | KCategory kCategory = new KCategory(); 21 | kCategory.setDelFlag(1); 22 | kCategory.setAddUser(uId); 23 | resultList.addAll(kCategoryDao.template(kCategory)); 24 | return resultList; 25 | } 26 | 27 | public BootTablePage getList(Integer start, Integer size, Integer uId){ 28 | KCategory kCategory = new KCategory(); 29 | kCategory.setDelFlag(1); 30 | kCategory.setAddUser(uId); 31 | List kQuartzList = kCategoryDao.template(kCategory, start, size); 32 | long allCount = kCategoryDao.templateCount(kCategory); 33 | BootTablePage bootTablePage = new BootTablePage(); 34 | bootTablePage.setRows(kQuartzList); 35 | bootTablePage.setTotal(allCount); 36 | return bootTablePage; 37 | } 38 | 39 | public KCategory getQuartz(Integer categoryId){ 40 | return kCategoryDao.single(categoryId); 41 | } 42 | 43 | public void insert(KCategory kCategory, Integer uId){ 44 | kCategory.setAddTime(new Date()); 45 | kCategory.setAddUser(uId); 46 | kCategory.setEditTime(new Date()); 47 | kCategory.setEditUser(uId); 48 | kCategory.setDelFlag(1); 49 | kCategoryDao.insert(kCategory); 50 | } 51 | 52 | public void delete(Integer categoryId){ 53 | KCategory kCategory = kCategoryDao.unique(categoryId); 54 | kCategory.setDelFlag(0); 55 | kCategoryDao.updateById(kCategory); 56 | } 57 | 58 | 59 | public void update(KCategory kCategory, Integer uId){ 60 | kCategory.setEditTime(new Date()); 61 | kCategory.setEditUser(uId); 62 | //只有不为null的字段才参与更新 63 | kCategoryDao.updateTemplateById(kCategory); 64 | } 65 | 66 | public boolean IsCategoryExist(Integer categoryId,String categoryName) { 67 | KCategory template = new KCategory(); 68 | template.setDelFlag(1); 69 | template.setCategoryName(categoryName); 70 | KCategory category = kCategoryDao.templateOne(template); 71 | if (null == category) { 72 | return false; 73 | } else if(categoryId!=null&&category.getCategoryId()==categoryId){ 74 | return false; 75 | }else{ 76 | return true; 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/utils/DateField.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.utils; 2 | 3 | import java.util.Calendar; 4 | 5 | public enum DateField { 6 | 7 | /** 8 | * 年 9 | * @see Calendar#YEAR 10 | */ 11 | YEAR(Calendar.YEAR), 12 | /** 13 | * 月 14 | * @see Calendar#MONTH 15 | */ 16 | MONTH(Calendar.MONTH), 17 | /** 18 | * 一年中第几周 19 | * @see Calendar#WEEK_OF_YEAR 20 | */ 21 | WEEK_OF_YEAR(Calendar.WEEK_OF_YEAR), 22 | /** 23 | * 一月中第几周 24 | * @see Calendar#WEEK_OF_MONTH 25 | */ 26 | WEEK_OF_MONTH(Calendar.WEEK_OF_MONTH), 27 | /** 28 | * 一月中的第几天 29 | * @see Calendar#DAY_OF_MONTH 30 | */ 31 | DAY_OF_MONTH(Calendar.DAY_OF_MONTH), 32 | /** 33 | *一年中的第几天 34 | * @see Calendar#DAY_OF_YEAR 35 | */ 36 | DAY_OF_YEAR(Calendar.DAY_OF_YEAR), 37 | /** 38 | *周几 39 | * @see Calendar#DAY_OF_WEEK 40 | */ 41 | DAY_OF_WEEK(Calendar.DAY_OF_WEEK), 42 | /** 43 | * 天所在的周是这个月的第几周 44 | * @see Calendar#DAY_OF_WEEK_IN_MONTH 45 | */ 46 | DAY_OF_WEEK_IN_MONTH(Calendar.DAY_OF_WEEK_IN_MONTH), 47 | /** 48 | * 上午或者下午 49 | * @see Calendar#AM_PM 50 | */ 51 | AM_PM(Calendar.AM_PM), 52 | /** 53 | * 小时,用于12小时制 54 | * @see Calendar#HOUR 55 | */ 56 | HOUR(Calendar.HOUR), 57 | /** 58 | * 小时,用于24小时制 59 | * @see Calendar#HOUR 60 | */ 61 | HOUR_OF_DAY(Calendar.HOUR_OF_DAY), 62 | /** 63 | * 分钟 64 | * @see Calendar#MINUTE 65 | */ 66 | MINUTE(Calendar.MINUTE), 67 | /** 68 | * 秒 69 | * @see Calendar#SECOND 70 | */ 71 | SECOND(Calendar.SECOND), 72 | /** 73 | * 毫秒 74 | * @see Calendar#MILLISECOND 75 | */ 76 | MILLISECOND(Calendar.MILLISECOND); 77 | 78 | // --------------------------------------------------------------- 79 | private int value; 80 | 81 | private DateField(int value) { 82 | this.value = value; 83 | } 84 | 85 | public int getValue() { 86 | return this.value; 87 | } 88 | 89 | /** 90 | * 将 {@link Calendar}相关值转换为DatePart枚举对象
91 | * 92 | * @param calendarPartIntValue Calendar中关于Week的int值 93 | * @return {@link DateField} 94 | */ 95 | public static DateField of(int calendarPartIntValue) { 96 | switch (calendarPartIntValue) { 97 | case Calendar.YEAR: 98 | return YEAR; 99 | case Calendar.MONTH: 100 | return MONTH; 101 | case Calendar.WEEK_OF_YEAR: 102 | return WEEK_OF_YEAR; 103 | case Calendar.WEEK_OF_MONTH: 104 | return WEEK_OF_MONTH; 105 | case Calendar.DAY_OF_MONTH: 106 | return DAY_OF_MONTH; 107 | case Calendar.DAY_OF_YEAR: 108 | return DAY_OF_YEAR; 109 | case Calendar.DAY_OF_WEEK: 110 | return DAY_OF_WEEK; 111 | case Calendar.DAY_OF_WEEK_IN_MONTH: 112 | return DAY_OF_WEEK_IN_MONTH; 113 | case Calendar.MINUTE: 114 | return MINUTE; 115 | case Calendar.SECOND: 116 | return SECOND; 117 | case Calendar.MILLISECOND: 118 | return MILLISECOND; 119 | default: 120 | return null; 121 | } 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/model/KCategory.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.model; 2 | 3 | import org.beetl.sql.core.annotatoin.SeqID; 4 | 5 | import java.util.Date; 6 | 7 | public class KCategory { 8 | //分类ID 9 | @SeqID(name="CATEGORY_ID_SEQ") 10 | private Integer categoryId ; 11 | //分类名称 12 | private String categoryName; 13 | //添加者 14 | private Integer addUser ; 15 | //是否删除(1:存在;0:删除) 16 | private Integer delFlag ; 17 | //编辑者 18 | private Integer editUser ; 19 | //添加时间 20 | private Date addTime ; 21 | //编辑时间 22 | private Date editTime ; 23 | 24 | public KCategory() { 25 | } 26 | 27 | public Integer getCategoryId() { 28 | return categoryId; 29 | } 30 | 31 | public void setCategoryId(Integer categoryId) { 32 | this.categoryId = categoryId; 33 | } 34 | 35 | public String getCategoryName() { 36 | return categoryName; 37 | } 38 | 39 | public void setCategoryName(String categoryName) { 40 | this.categoryName = categoryName; 41 | } 42 | 43 | public Integer getAddUser() { 44 | return addUser; 45 | } 46 | 47 | public void setAddUser(Integer addUser) { 48 | this.addUser = addUser; 49 | } 50 | 51 | public Integer getDelFlag() { 52 | return delFlag; 53 | } 54 | 55 | public void setDelFlag(Integer delFlag) { 56 | this.delFlag = delFlag; 57 | } 58 | 59 | public Integer getEditUser() { 60 | return editUser; 61 | } 62 | 63 | public void setEditUser(Integer editUser) { 64 | this.editUser = editUser; 65 | } 66 | 67 | public Date getAddTime() { 68 | return addTime; 69 | } 70 | 71 | public void setAddTime(Date addTime) { 72 | this.addTime = addTime; 73 | } 74 | 75 | public Date getEditTime() { 76 | return editTime; 77 | } 78 | 79 | public void setEditTime(Date editTime) { 80 | this.editTime = editTime; 81 | } 82 | 83 | public KCategory(Integer categoryId, String categoryName, Integer addUser, Integer delFlag, Integer editUser, Date addTime, Date editTime) { 84 | this.categoryId = categoryId; 85 | this.categoryName = categoryName; 86 | this.addUser = addUser; 87 | this.delFlag = delFlag; 88 | this.editUser = editUser; 89 | this.addTime = addTime; 90 | this.editTime = editTime; 91 | } 92 | 93 | @Override 94 | public String toString() { 95 | return "KCategory{" + 96 | "categoryId=" + categoryId + 97 | ", categoryName='" + categoryName + '\'' + 98 | ", addUser=" + addUser + 99 | ", delFlag=" + delFlag + 100 | ", editUser=" + editUser + 101 | ", addTime=" + addTime + 102 | ", editTime=" + editTime + 103 | '}'; 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/utils/CommonUtils.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.utils; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | import java.text.ParseException; 6 | import java.text.SimpleDateFormat; 7 | import java.util.ArrayList; 8 | import java.util.Calendar; 9 | import java.util.Date; 10 | import java.util.List; 11 | 12 | import org.apache.commons.io.FileUtils; 13 | import org.springframework.web.multipart.MultipartFile; 14 | 15 | public class CommonUtils { 16 | 17 | /** 18 | * @param uId 用户ID 19 | * @param jobFile 上传的作业文件 20 | * @return String 21 | * @throws IOException 22 | * @Title saveFile 23 | * @Description 保存上传的作业文件 24 | */ 25 | public static String saveFile(Integer uId, String kettleFileRepository, MultipartFile jobFile) throws IOException { 26 | StringBuilder allLogFilePath = new StringBuilder(); 27 | allLogFilePath.append(kettleFileRepository).append("/") 28 | .append(uId).append("/") 29 | .append(new Date().getTime()).append("/") 30 | .append(jobFile.getOriginalFilename()); 31 | FileUtils.writeByteArrayToFile(new File(allLogFilePath.toString()), jobFile.getBytes()); 32 | return allLogFilePath.toString(); 33 | } 34 | 35 | /** 36 | * @param startTime 起始时间 37 | * @param stopTime 结束时间 38 | * @param resultList 递归的返回值 39 | * @return List 40 | * @Title getEveryDayData 41 | * @Description 确定每一次运行属于哪一天 42 | */ 43 | public static List getEveryDayData(Long startTime, Long stopTime, List resultList) { 44 | List timeList = new ArrayList(); 45 | try { 46 | for (int i = -6; i <= 1; i++) { 47 | Calendar instance = Calendar.getInstance(); 48 | instance.add(Calendar.DATE, i); 49 | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); 50 | String dateFormat = simpleDateFormat.format(instance.getTime()); 51 | Long time = simpleDateFormat.parse(dateFormat).getTime(); 52 | timeList.add(time); 53 | } 54 | } catch (ParseException e) { 55 | e.printStackTrace(); 56 | } 57 | Integer startDay = 0; 58 | Integer stopDay = 0; 59 | for (int i = 0; i <= 6; i++) { 60 | if (timeList.get(i) < startTime && startTime < timeList.get(i + 1)) { 61 | startDay = i; 62 | } 63 | if (timeList.get(i) < stopTime && stopTime < timeList.get(i + 1)) { 64 | stopDay = i; 65 | } 66 | } 67 | if ((stopDay - startDay) > 0) { 68 | for (int i = startDay; i <= stopDay; i++) { 69 | resultList.set(i, resultList.get(i) + 1); 70 | } 71 | } else { 72 | resultList.set(startDay, resultList.get(startDay) + 1); 73 | } 74 | return resultList; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/main/webapp/static/js/my/quartz-edit.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | $("#quartzCron").cronGen({ 3 | direction : 'left' 4 | }); 5 | reset(); 6 | }); 7 | var reset = function(){ 8 | var quartzId = $("#quartzId").val(); 9 | $.ajax({ 10 | type: 'POST', 11 | async: false, 12 | url: 'quartz/getQuartz.shtml', 13 | data: { 14 | quartzId : quartzId 15 | }, 16 | success: function (data) { 17 | var Quartz = data.data; 18 | $("#quartzDescription").val(Quartz.quartzDescription); 19 | $("#cQuarz").val(Quartz.quartzCron); 20 | }, 21 | error: function () { 22 | alert("请求失败!请刷新页面重试"); 23 | }, 24 | dataType: 'json' 25 | }); 26 | } 27 | $.validator.setDefaults({ 28 | highlight: function (element) { 29 | $(element).closest('.form-group').removeClass('has-success').addClass('has-error'); 30 | }, 31 | success: function (element) { 32 | $(element).closest('.form-group').removeClass('has-error').addClass('has-success'); 33 | }, 34 | errorElement: "span", 35 | errorPlacement: function (error, element) { 36 | if (element.is(":radio") || element.is(":checkbox")) { 37 | error.appendTo(element.parent().parent().parent()); 38 | }else if(element.is("#cQuarz")){ 39 | error.appendTo(element.parent().parent()); 40 | } else { 41 | error.appendTo(element.parent()); 42 | } 43 | }, 44 | errorClass: "help-block m-b-none", 45 | validClass: "help-block m-b-none" 46 | }); 47 | $().ready(function () { 48 | var icon = " "; 49 | $("#QuartzForm").validate({ 50 | rules: { 51 | quartzDescription: { 52 | required: true 53 | }, 54 | cQuarz: { 55 | required: true 56 | } 57 | }, 58 | messages: { 59 | quartzDescription: { 60 | required: icon + "请输入执行策略名称" 61 | }, 62 | cQuarz: { 63 | required: icon + "请选择cron编码" 64 | } 65 | }, 66 | submitHandler: function (form) { 67 | $("#quartzCron").val($("#cQuarz").val()); 68 | $.post("quartz/update.shtml", decodeURIComponent($(form).serialize(), true), function (data) { 69 | var result = JSON.parse(data); 70 | if (result.status == "success") { 71 | layer.msg('更新成功', { 72 | time: 2000, 73 | icon: 6 74 | }); 75 | setTimeout(function () { 76 | location.href = "view/quartz/listUI.shtml"; 77 | }, 2000); 78 | } else { 79 | layer.msg(result.message, {icon: 2}); 80 | } 81 | }); 82 | } 83 | }); 84 | }); 85 | var cancel = function(){ 86 | location.href = "view/quartz/listUI.shtml"; 87 | } -------------------------------------------------------------------------------- /src/main/webapp/static/lib/bootstrap-fileinput/css/fileinput-rtl.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * bootstrap-fileinput v4.4.2 3 | * http://plugins.krajee.com/file-input 4 | * 5 | * Krajee RTL (Right To Left) default styling for bootstrap-fileinput. 6 | * 7 | * Author: Kartik Visweswaran 8 | * Copyright: 2014 - 2017, Kartik Visweswaran, Krajee.com 9 | * 10 | * Licensed under the BSD 3-Clause 11 | * https://github.com/kartik-v/bootstrap-fileinput/blob/master/LICENSE.md 12 | */ 13 | .kv-rtl { 14 | direction: rtl; 15 | } 16 | 17 | .kv-rtl .close { 18 | float: left; 19 | } 20 | 21 | .kv-rtl .input-group-btn:last-child >.btn { 22 | border-top-right-radius: 0 !important; 23 | border-bottom-right-radius: 0 !important; 24 | border-top-left-radius: 4px !important; 25 | border-bottom-left-radius: 4px !important; 26 | 27 | } 28 | 29 | .kv-rtl .input-group .form-control:first-child { 30 | border-top-right-radius: 4px !important; 31 | border-bottom-right-radius: 4px !important; 32 | border-top-left-radius: 0px !important; 33 | border-bottom-left-radius: 0px !important; 34 | 35 | } 36 | 37 | .kv-rtl .file-loading { 38 | right: auto; 39 | left: 0; 40 | text-align: left; 41 | } 42 | 43 | .kv-rtl .btn-file input[type=file] { 44 | right: auto; 45 | left: 0; 46 | text-align: left; 47 | background: none repeat scroll 100% 0 transparent; 48 | } 49 | 50 | .kv-rtl .file-zoom-dialog { 51 | text-align: right; 52 | } 53 | 54 | .kv-rtl .file-error-message pre, 55 | .kv-rtl .file-error-message ul { 56 | text-align: right; 57 | } 58 | 59 | .kv-rtl .krajee-default.file-preview-frame { 60 | box-shadow: -1px 1px 5px 0 #a2958a; 61 | float: right; 62 | } 63 | 64 | .kv-rtl .krajee-default.file-preview-frame:not(.file-preview-error):hover { 65 | box-shadow: -3px 3px 5px 0 #333; 66 | } 67 | 68 | .kv-rtl .krajee-default .file-actions, 69 | .kv-rtl .krajee-default .file-other-error { 70 | text-align: right; 71 | } 72 | 73 | .kv-rtl .krajee-default .file-footer-buttons { 74 | float: left; 75 | } 76 | 77 | .kv-rtl .krajee-default .file-drag-handle, 78 | .kv-rtl .krajee-default .file-upload-indicator { 79 | left: auto; 80 | right: -6px; 81 | padding: 8px 3px 1px 8px; 82 | border-top-left-radius: 24px; 83 | border-top-right-radius: 0; 84 | } 85 | 86 | .kv-rtl .file-drop-zone { 87 | margin: 12px 12px 12px 15px; 88 | } 89 | 90 | .kv-rtl .floating-buttons { 91 | left: 10px; 92 | right: auto; 93 | } 94 | 95 | .kv-rtl .kv-zoom-actions .btn, 96 | .kv-rtl .floating-buttons .btn { 97 | margin-right: 3px; 98 | } 99 | 100 | .kv-rtl .btn-prev { 101 | right: 1px; 102 | left: auto; 103 | } 104 | 105 | .kv-rtl .btn-next { 106 | left: 1px; 107 | right: auto; 108 | } 109 | 110 | .kv-rtl .pull-right { 111 | float: left!important; 112 | } 113 | 114 | .kv-rtl .pull-left { 115 | float: right!important; 116 | } 117 | 118 | .kv-rtl .modal-title { 119 | float: right; 120 | direction: ltr; 121 | } -------------------------------------------------------------------------------- /src/main/webapp/static/js/my/user-edit.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | reset(); 3 | }); 4 | var reset = function(){ 5 | var uId = $("#uId").val(); 6 | $.ajax({ 7 | type: 'POST', 8 | async: false, 9 | url: 'user/getUser.shtml', 10 | data: { 11 | uId : uId 12 | }, 13 | success: function (data) { 14 | var User = data.data; 15 | $("#uNickname").val(User.uNickname); 16 | $("#uEmail").val(User.uEmail); 17 | $("#uPhone").val(User.uPhone); 18 | $("#uAccount").val(User.uAccount); 19 | }, 20 | error: function () { 21 | alert("请求失败!请刷新页面重试"); 22 | }, 23 | dataType: 'json' 24 | }); 25 | } 26 | $.validator.setDefaults({ 27 | highlight: function (element) { 28 | $(element).closest('.form-group').removeClass('has-success').addClass('has-error'); 29 | }, 30 | success: function (element) { 31 | $(element).closest('.form-group').removeClass('has-error').addClass('has-success'); 32 | }, 33 | errorElement: "span", 34 | errorPlacement: function (error, element) { 35 | if (element.is(":radio") || element.is(":checkbox")) { 36 | error.appendTo(element.parent().parent().parent()); 37 | }else { 38 | error.appendTo(element.parent()); 39 | } 40 | }, 41 | errorClass: "help-block m-b-none", 42 | validClass: "help-block m-b-none" 43 | }); 44 | $().ready(function () { 45 | var icon = " "; 46 | $("#UserForm").validate({ 47 | rules: { 48 | uNickname: { 49 | required: true 50 | }, 51 | uEmail:{ 52 | email:true 53 | }, 54 | uPhone:{ 55 | digits:true, 56 | minlength:11 57 | } 58 | }, 59 | messages: { 60 | uNickname: { 61 | required: icon + "请输入用户昵称" 62 | }, 63 | uEmail:{ 64 | email: icon + "请输入合法的电子邮件" 65 | }, 66 | uPhone:{ 67 | digits: icon + "请输入数字", 68 | minlength: icon + "电话长度必须为11位" 69 | } 70 | }, 71 | submitHandler: function (form) { 72 | $.post("user/update.shtml", decodeURIComponent($(form).serialize(), true), function (data) { 73 | var result = JSON.parse(data); 74 | if (result.status == "success") { 75 | layer.msg('更新成功', { 76 | time: 2000, 77 | icon: 6 78 | }); 79 | setTimeout(function () { 80 | location.href = "view/user/listUI.shtml"; 81 | }, 2000); 82 | } else { 83 | layer.msg(result.message, {icon: 2}); 84 | } 85 | }); 86 | } 87 | }); 88 | }); 89 | var cancel = function(){ 90 | location.href = "view/user/listUI.shtml"; 91 | } -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/quartz/QuartzListener.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.quartz; 2 | 3 | import com.zhaxd.common.toolkit.Constant; 4 | import com.zhaxd.core.model.KJob; 5 | import com.zhaxd.core.model.KTrans; 6 | import com.zhaxd.web.quartz.model.DBConnectionModel; 7 | import org.beetl.sql.core.*; 8 | import org.beetl.sql.core.db.DBStyle; 9 | import org.beetl.sql.core.db.MySqlStyle; 10 | import org.beetl.sql.core.db.OracleStyle; 11 | import org.beetl.sql.ext.DebugInterceptor; 12 | import org.quartz.JobDataMap; 13 | import org.quartz.JobExecutionContext; 14 | import org.quartz.JobExecutionException; 15 | import org.quartz.JobListener; 16 | 17 | import java.util.Date; 18 | 19 | public class QuartzListener implements JobListener{ 20 | 21 | @Override 22 | public String getName() { 23 | return new Date().getTime() + "QuartzListener"; 24 | } 25 | @Override 26 | public void jobToBeExecuted(JobExecutionContext context) { 27 | } 28 | @Override 29 | public void jobExecutionVetoed(JobExecutionContext context) { 30 | } 31 | @Override 32 | public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) { 33 | String jobName = context.getJobDetail().getKey().getName(); 34 | String jobGroupName = context.getJobDetail().getKey().getGroup(); 35 | String triggerName = context.getTrigger().getKey().getName(); 36 | String triggerGroupName = context.getTrigger().getKey().getGroup(); 37 | //一次性任务,执行完之后需要移除 38 | QuartzManager.removeJob(jobName, jobGroupName, triggerName, triggerGroupName); 39 | 40 | JobDataMap dataMap = context.getJobDetail().getJobDataMap(); 41 | String jobId = String.valueOf(dataMap.get(Constant.TRANSID)); 42 | String jobtype = String.valueOf(dataMap.get(Constant.JOBTYPE)); 43 | 44 | Object DbConnectionObject = dataMap.get(Constant.DBCONNECTIONOBJECT); 45 | DBConnectionModel DBConnectionModel = (DBConnectionModel) DbConnectionObject; 46 | ConnectionSource source = ConnectionSourceHelper.getSimple(DBConnectionModel.getConnectionDriveClassName(), 47 | DBConnectionModel.getConnectionUrl(), DBConnectionModel.getConnectionUser(), DBConnectionModel.getConnectionPassword()); 48 | DBStyle dbStyle = null; 49 | if("oracle".equalsIgnoreCase(Constant.DATASOURCE_TYPE)){ 50 | dbStyle = new OracleStyle(); 51 | }else if("mysql".equalsIgnoreCase(Constant.DATASOURCE_TYPE)){ 52 | dbStyle = new MySqlStyle(); 53 | }else{ 54 | dbStyle = new OracleStyle(); 55 | } 56 | SQLLoader loader = new ClasspathLoader("/"); 57 | UnderlinedNameConversion nc = new UnderlinedNameConversion(); 58 | SQLManager sqlManager = new SQLManager(dbStyle, loader, 59 | source, nc, new Interceptor[]{new DebugInterceptor()}); 60 | if (jobtype.equals("1")){ 61 | KJob kJob = sqlManager.unique(KJob.class,Integer.valueOf(jobId)); 62 | kJob.setJobStatus(2); 63 | sqlManager.updateTemplateById(kJob); 64 | } 65 | else if (jobtype.equals("2")) { 66 | KTrans kTrans = sqlManager.unique(KTrans.class, Integer.valueOf(jobId)); 67 | kTrans.setTransStatus(2); 68 | sqlManager.updateTemplateById(kTrans); 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/service/QuartzService.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.service; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Date; 5 | import java.util.List; 6 | 7 | import org.pentaho.di.core.exception.KettleException; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.stereotype.Service; 10 | 11 | import com.zhaxd.core.dto.BootTablePage; 12 | import com.zhaxd.core.mapper.KQuartzDao; 13 | import com.zhaxd.core.model.KQuartz; 14 | 15 | @Service 16 | public class QuartzService { 17 | 18 | 19 | @Autowired 20 | private KQuartzDao kQuartzDao; 21 | 22 | /** 23 | * @Title getList 24 | * @Description 获取定时策略列表 25 | * @return 26 | * @throws KettleException 27 | * @return List 28 | */ 29 | public List getList(Integer uId){ 30 | List resultList = new ArrayList(); 31 | KQuartz kQuartz = new KQuartz(); 32 | kQuartz.setDelFlag(1); 33 | kQuartz.setAddUser(uId); 34 | resultList.addAll(kQuartzDao.template(kQuartz)); 35 | return resultList; 36 | } 37 | 38 | /** 39 | * @Title getList 40 | * @Description 获取分页列表 41 | * @param start 起始行数 42 | * @param size 每页行数 43 | * @param uId 用户ID 44 | * @return 45 | * @throws KettleException 46 | * @return BootTablePage 47 | */ 48 | public BootTablePage getList(Integer start, Integer size, Integer uId){ 49 | KQuartz kQuartz = new KQuartz(); 50 | kQuartz.setDelFlag(1); 51 | kQuartz.setAddUser(uId); 52 | List kQuartzList = kQuartzDao.template(kQuartz, start, size); 53 | long allCount = kQuartzDao.templateCount(kQuartz); 54 | BootTablePage bootTablePage = new BootTablePage(); 55 | bootTablePage.setRows(kQuartzList); 56 | bootTablePage.setTotal(allCount); 57 | return bootTablePage; 58 | } 59 | /** 60 | * @Title getQuartz 61 | * @Description 获取定时策略列表 62 | * @param quartzId 定时策略ID 63 | * @return 64 | * @return KQuartz 65 | */ 66 | public KQuartz getQuartz(Integer quartzId){ 67 | return kQuartzDao.single(quartzId); 68 | } 69 | 70 | /** 71 | * @Title insert 72 | * @Description 插入定时策略 73 | * @param kQuartz 定时策略对象 74 | * @param uId 用户ID 75 | * @return void 76 | */ 77 | public void insert(KQuartz kQuartz, Integer uId){ 78 | kQuartz.setAddTime(new Date()); 79 | kQuartz.setAddUser(uId); 80 | kQuartz.setEditTime(new Date()); 81 | kQuartz.setEditUser(uId); 82 | kQuartz.setDelFlag(1); 83 | kQuartzDao.insert(kQuartz); 84 | } 85 | /** 86 | * @Title delete 87 | * @Description 删除定时策略 88 | * @param quartzId 定时策略ID 89 | * @return void 90 | */ 91 | public void delete(Integer quartzId){ 92 | KQuartz kQuartz = kQuartzDao.unique(quartzId); 93 | kQuartz.setDelFlag(0); 94 | kQuartzDao.updateById(kQuartz); 95 | } 96 | 97 | /** 98 | * @Title update 99 | * @Description 更新定时策略 100 | * @param kQuartz 定时策略对象 101 | * @param uId 用户ID 102 | * @return void 103 | */ 104 | public void update(KQuartz kQuartz, Integer uId){ 105 | kQuartz.setEditTime(new Date()); 106 | kQuartz.setEditUser(uId); 107 | //只有不为null的字段才参与更新 108 | kQuartzDao.updateTemplateById(kQuartz); 109 | } 110 | } -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/web/controller/CategoryController.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.web.controller; 2 | 3 | import com.zhaxd.common.toolkit.Constant; 4 | import com.zhaxd.core.dto.BootTablePage; 5 | import com.zhaxd.core.dto.ResultDto; 6 | import com.zhaxd.core.model.KCategory; 7 | import com.zhaxd.core.model.KUser; 8 | import com.zhaxd.web.service.CategoryService; 9 | import com.zhaxd.web.utils.JsonUtils; 10 | import org.springframework.beans.factory.annotation.Autowired; 11 | import org.springframework.web.bind.annotation.RequestMapping; 12 | import org.springframework.web.bind.annotation.RestController; 13 | 14 | import javax.servlet.http.HttpServletRequest; 15 | import javax.servlet.http.HttpServletResponse; 16 | import java.io.IOException; 17 | 18 | @RestController 19 | @RequestMapping("/category/") 20 | public class CategoryController { 21 | @Autowired 22 | private CategoryService categoryService; 23 | 24 | @RequestMapping("getSimpleList.shtml") 25 | public String simpleList(HttpServletRequest request){ 26 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 27 | return JsonUtils.objectToJson(categoryService.getList(kUser.getuId())); 28 | } 29 | @RequestMapping("getList.shtml") 30 | public String getList(Integer offset, Integer limit,String targetTable, HttpServletRequest request){ 31 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 32 | BootTablePage list = categoryService.getList(offset, limit,kUser.getuId()); 33 | return JsonUtils.objectToJson(list); 34 | } 35 | 36 | @RequestMapping("getCategory.shtml") 37 | public String getQuartz(Integer categoryId){ 38 | return ResultDto.success(categoryService.getQuartz(categoryId)); 39 | } 40 | 41 | @RequestMapping("insert.shtml") 42 | public String insert(KCategory kCategory, HttpServletRequest request){ 43 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 44 | categoryService.insert(kCategory,kUser.getuId()); 45 | return ResultDto.success(); 46 | } 47 | @RequestMapping("delete.shtml") 48 | public String delete(Integer categoryId){ 49 | categoryService.delete(categoryId); 50 | return ResultDto.success(); 51 | } 52 | @RequestMapping("update.shtml") 53 | public String update(KCategory kCategory, HttpServletRequest request){ 54 | KUser kUser = (KUser) request.getSession().getAttribute(Constant.SESSION_ID); 55 | try{ 56 | categoryService.update(kCategory,kUser.getuId()); 57 | return ResultDto.success(); 58 | }catch(Exception e){ 59 | return ResultDto.success(e.toString()); 60 | } 61 | } 62 | @RequestMapping("IsCategoryExist.shtml") 63 | public void IsCategoryExist(Integer categoryId,String categoryName, HttpServletResponse response) { 64 | try { 65 | if (categoryService.IsCategoryExist(categoryId,categoryName)) { 66 | response.getWriter().write("false"); 67 | } else { 68 | response.getWriter().write("true"); 69 | } 70 | } catch (IOException e) { 71 | e.printStackTrace(); 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/views/quartz/edit.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8"%> 3 | <%String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%> 4 | 5 | 6 | 7 | 8 | 9 | 10 | 编辑执行策略 11 | 12 | 13 | 14 | 15 | 16 | 24 | 25 | 26 |
27 |
28 |
29 |
编辑执行策略
30 | 38 |
39 |
40 |
41 | 42 |
43 | 44 |
45 | 46 |
47 |
48 |
49 | 50 |
51 | 53 |
54 |
55 |
56 |
57 | 58 | 59 |
60 |
61 |
62 |
63 |
64 |
65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /src/main/webapp/Html/js/libs/url/cmg.open.url.builder.taobao.js: -------------------------------------------------------------------------------- 1 | var MessageDigest = java.security.MessageDigest; 2 | var String = java.lang.String; 3 | var StringBuffer = java.lang.StringBuffer; 4 | var Integer = java.lang.Integer; 5 | var Hashtable = java.util.Hashtable; 6 | var Iteractor = java.util.Iteractor; 7 | var DecimalFormat = java.text.DecimalFormat; 8 | var URI = org.apache.commons.httpclient.URI; 9 | var TreeMap = java.util.TreeMap; 10 | var Date = java.util.Date; 11 | 12 | var URLEncoder = java.net.URLEncoder; 13 | var Base64 = org.apache.commons.codec.binary.Base64; 14 | var RSA = org.ukettle.ehub.agent.client.RSA; 15 | 16 | function TaobaoMD5(treeMap){ 17 | this.ht = treeMap; 18 | } 19 | 20 | TaobaoMD5.prototype.put = function (key, value) { 21 | this.ht.put(key, value); 22 | } 23 | 24 | TaobaoMD5.prototype.encrypt = function (app_secret) { 25 | var orgin = new StringBuffer(); 26 | orgin.append(app_secret); 27 | 28 | var map = new TreeMap(); 29 | map.putAll(this.ht); 30 | 31 | var iter = map.keySet().iterator(); 32 | while (iter.hasNext()) { 33 | var name = String.valueOf(iter.next()); 34 | if (new String(map.get(name)).length() > 0) { 35 | orgin.append(name).append(map.get(name)); 36 | } 37 | } 38 | 39 | orgin.append(app_secret); 40 | 41 | // get the md5 digest algorithm 42 | var algorithm = MessageDigest.getInstance("MD5"); 43 | 44 | // get the input as bytes 45 | var bytes = new String(orgin).getBytes("UTF-8"); 46 | 47 | // calculate the digest 48 | algorithm.reset(); 49 | algorithm.update(bytes); 50 | var md5Digest = algorithm.digest(); 51 | 52 | // turn the digest into a hex-string representation 53 | var hexString = new StringBuffer(); 54 | 55 | for (var i = 0; i < md5Digest.length; i++){ 56 | var hex = Integer.toHexString(md5Digest[i] & 0XFF); 57 | if (hex.length() == 1){ 58 | hexString.append('0').append(""); 59 | } 60 | hexString.append(hex); 61 | } 62 | 63 | // write output value 64 | var sign = hexString.toString().toUpperCase(); 65 | return sign 66 | } 67 | 68 | TaobaoMD5.prototype.URLEncode = function (ru, rp) { 69 | var request_url = ru; 70 | var request_params = rp; 71 | for (var it = this.ht.entrySet().iterator(); it.hasNext();) { 72 | var e = it.next(); 73 | if (new String(e.getValue()).length() > 0) { 74 | request_params.append("&").append(e.getKey()).append("=").append(e.getValue()); 75 | } 76 | } 77 | var url = request_url + "?" + request_params.toString().substring(1); 78 | 79 | // return url; 80 | return new URI(url).toString(); 81 | } 82 | 83 | TaobaoMD5.prototype.EncodeURL = function (ru, rp) { 84 | var request_url = ru; 85 | var request_params = rp; 86 | for (var it = this.ht.entrySet().iterator(); it.hasNext();) { 87 | var e = it.next(); 88 | if (new String(e.getValue()).length() > 0) { 89 | request_params.append("&").append(e.getKey()).append("=").append(e.getValue()); 90 | } 91 | } 92 | var url = request_url + "?" + request_params.toString().substring(1); 93 | 94 | if(null != url){ 95 | var rsaEncode = RSA.getENCRYPTInstance(); 96 | var data = rsaEncode.encryptData(new String(url).getBytes("UTF-8")); 97 | url = URLEncoder.encode(new String(Base64.encodeBase64(data)),"UTF-8") 98 | } 99 | return url; 100 | } -------------------------------------------------------------------------------- /src/main/resources/spring/applicationContext-beetlsql.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | 22 | classpath:resource/*-DEV.properties 23 | 24 | 25 | 26 | 27 | 28 | 29 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /src/main/java/com/zhaxd/core/conf/UTF8StringHttpMessageConverter.java: -------------------------------------------------------------------------------- 1 | package com.zhaxd.core.conf; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStreamReader; 5 | import java.io.OutputStreamWriter; 6 | import java.io.UnsupportedEncodingException; 7 | import java.nio.charset.Charset; 8 | import java.util.ArrayList; 9 | import java.util.List; 10 | 11 | import org.springframework.http.HttpInputMessage; 12 | import org.springframework.http.HttpOutputMessage; 13 | import org.springframework.http.MediaType; 14 | import org.springframework.http.converter.AbstractHttpMessageConverter; 15 | import org.springframework.util.FileCopyUtils; 16 | /** 17 | * @ClassName UTF8StringHttpMessageConverter 18 | * @Description 格式化springmvc返回值对象,防止出现乱码 19 | * @author gongym 20 | * @date 2017年3月17日 上午8:08:09 21 | */ 22 | public class UTF8StringHttpMessageConverter extends AbstractHttpMessageConverter { 23 | 24 | public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); 25 | 26 | private final List availableCharsets; 27 | 28 | private boolean writeAcceptCharset = true; 29 | 30 | public UTF8StringHttpMessageConverter() { 31 | super(new MediaType("text", "plain", DEFAULT_CHARSET), MediaType.ALL); 32 | this.availableCharsets = new ArrayList(Charset.availableCharsets().values()); 33 | } 34 | 35 | /** 36 | * Indicates whether the {@code Accept-Charset} should be written to any 37 | * outgoing request. 38 | *

39 | * Default is {@code true}. 40 | */ 41 | public void setWriteAcceptCharset(boolean writeAcceptCharset) { 42 | this.writeAcceptCharset = writeAcceptCharset; 43 | } 44 | 45 | @Override 46 | public boolean supports(Class clazz) { 47 | return String.class.equals(clazz); 48 | } 49 | 50 | @Override 51 | protected String readInternal(Class clazz, HttpInputMessage inputMessage) throws IOException { 52 | Charset charset = getContentTypeCharset(inputMessage.getHeaders().getContentType()); 53 | return FileCopyUtils.copyToString(new InputStreamReader(inputMessage.getBody(), charset)); 54 | } 55 | 56 | @Override 57 | protected Long getContentLength(String s, MediaType contentType) { 58 | Charset charset = getContentTypeCharset(contentType); 59 | try { 60 | return (long) s.getBytes(charset.name()).length; 61 | } catch (UnsupportedEncodingException ex) { 62 | throw new InternalError(ex.getMessage()); 63 | } 64 | } 65 | 66 | @Override 67 | protected void writeInternal(String s, HttpOutputMessage outputMessage) throws IOException { 68 | if (writeAcceptCharset) { 69 | outputMessage.getHeaders().setAcceptCharset(getAcceptedCharsets()); 70 | } 71 | Charset charset = getContentTypeCharset(outputMessage.getHeaders().getContentType()); 72 | FileCopyUtils.copy(s, new OutputStreamWriter(outputMessage.getBody(), charset)); 73 | } 74 | 75 | /** 76 | * Return the list of supported {@link Charset}. 77 | * 78 | *

79 | * By default, returns {@link Charset#availableCharsets()}. Can be 80 | * overridden in subclasses. 81 | * 82 | * @return the list of accepted charsets 83 | */ 84 | protected List getAcceptedCharsets() { 85 | return this.availableCharsets; 86 | } 87 | 88 | private Charset getContentTypeCharset(MediaType contentType) { 89 | if (contentType != null && contentType.getCharset() != null) { 90 | return contentType.getCharset(); 91 | } else { 92 | return DEFAULT_CHARSET; 93 | } 94 | } 95 | } 96 | --------------------------------------------------------------------------------