├── src └── main │ ├── resources │ ├── static │ │ ├── html │ │ │ └── zhaopin_files │ │ │ │ ├── hm.js │ │ │ │ ├── best-tag.png │ │ │ │ ├── detailviph.png │ │ │ │ ├── detailvipm.png │ │ │ │ ├── 1-resume.a3759d.png │ │ │ │ ├── adv-tojoy.798a32.gif │ │ │ │ ├── app_qrcode.10daec.png │ │ │ │ ├── zhaopin_logo.465947.png │ │ │ │ ├── 3-miniprogram-qrcode.35c2b4.jpg │ │ │ │ ├── manifest.web.54250c.js │ │ │ │ └── native-promise-only-0.8.1.js │ │ ├── images │ │ │ ├── 20190213171158.png │ │ │ ├── 20190213171647.png │ │ │ ├── 20190213171658.png │ │ │ └── 20190213171706.png │ │ ├── plugins │ │ │ ├── admin-lte │ │ │ │ ├── img │ │ │ │ │ ├── icons.png │ │ │ │ │ ├── avatar.png │ │ │ │ │ ├── avatar04.png │ │ │ │ │ ├── avatar2.png │ │ │ │ │ ├── avatar3.png │ │ │ │ │ ├── avatar5.png │ │ │ │ │ ├── boxed-bg.jpg │ │ │ │ │ ├── boxed-bg.png │ │ │ │ │ ├── photo1.png │ │ │ │ │ ├── photo2.png │ │ │ │ │ ├── photo3.jpg │ │ │ │ │ ├── photo4.jpg │ │ │ │ │ ├── credit │ │ │ │ │ │ ├── cirrus.png │ │ │ │ │ │ ├── mestro.png │ │ │ │ │ │ ├── paypal.png │ │ │ │ │ │ ├── visa.png │ │ │ │ │ │ ├── paypal2.png │ │ │ │ │ │ ├── mastercard.png │ │ │ │ │ │ └── american-express.png │ │ │ │ │ ├── default-50x50.gif │ │ │ │ │ ├── user1-128x128.jpg │ │ │ │ │ ├── user2-160x160.jpg │ │ │ │ │ ├── user3-128x128.jpg │ │ │ │ │ ├── user4-128x128.jpg │ │ │ │ │ ├── user5-128x128.jpg │ │ │ │ │ ├── user6-128x128.jpg │ │ │ │ │ ├── user7-128x128.jpg │ │ │ │ │ └── user8-128x128.jpg │ │ │ │ └── css │ │ │ │ │ ├── alt │ │ │ │ │ ├── AdminLTE-fullcalendar.min.css │ │ │ │ │ ├── AdminLTE-fullcalendar.css │ │ │ │ │ ├── AdminLTE-select2.min.css │ │ │ │ │ └── AdminLTE-select2.css │ │ │ │ │ └── skins │ │ │ │ │ ├── skin-red.min.css │ │ │ │ │ ├── skin-green.min.css │ │ │ │ │ ├── skin-purple.min.css │ │ │ │ │ ├── skin-yellow.min.css │ │ │ │ │ ├── skin-blue.min.css │ │ │ │ │ ├── skin-black.min.css │ │ │ │ │ ├── skin-red-light.min.css │ │ │ │ │ ├── skin-green-light.min.css │ │ │ │ │ ├── skin-purple-light.min.css │ │ │ │ │ ├── skin-yellow-light.min.css │ │ │ │ │ ├── skin-blue-light.min.css │ │ │ │ │ ├── skin-black-light.min.css │ │ │ │ │ ├── skin-red.css │ │ │ │ │ ├── skin-green.css │ │ │ │ │ ├── skin-purple.css │ │ │ │ │ ├── skin-yellow.css │ │ │ │ │ └── skin-blue.css │ │ │ ├── font-awesome │ │ │ │ ├── fonts │ │ │ │ │ ├── FontAwesome.otf │ │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ │ └── fontawesome-webfont.woff2 │ │ │ │ ├── less │ │ │ │ │ ├── screen-reader.less │ │ │ │ │ ├── fixed-width.less │ │ │ │ │ ├── larger.less │ │ │ │ │ ├── list.less │ │ │ │ │ ├── core.less │ │ │ │ │ ├── stacked.less │ │ │ │ │ ├── font-awesome.less │ │ │ │ │ ├── bordered-pulled.less │ │ │ │ │ ├── rotated-flipped.less │ │ │ │ │ ├── path.less │ │ │ │ │ ├── animated.less │ │ │ │ │ └── mixins.less │ │ │ │ ├── scss │ │ │ │ │ ├── _fixed-width.scss │ │ │ │ │ ├── _screen-reader.scss │ │ │ │ │ ├── _larger.scss │ │ │ │ │ ├── _list.scss │ │ │ │ │ ├── _core.scss │ │ │ │ │ ├── font-awesome.scss │ │ │ │ │ ├── _stacked.scss │ │ │ │ │ ├── _bordered-pulled.scss │ │ │ │ │ ├── _rotated-flipped.scss │ │ │ │ │ ├── _path.scss │ │ │ │ │ ├── _animated.scss │ │ │ │ │ └── _mixins.scss │ │ │ │ └── HELP-US-OUT.txt │ │ │ ├── bootstrap │ │ │ │ ├── fonts │ │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ │ └── js │ │ │ │ │ └── npm.js │ │ │ ├── select2 │ │ │ │ └── js │ │ │ │ │ └── i18n │ │ │ │ │ ├── zh-TW.js │ │ │ │ │ ├── zh-CN.js │ │ │ │ │ ├── az.js │ │ │ │ │ ├── ja.js │ │ │ │ │ ├── ko.js │ │ │ │ │ ├── ar.js │ │ │ │ │ ├── id.js │ │ │ │ │ ├── vi.js │ │ │ │ │ ├── is.js │ │ │ │ │ ├── tr.js │ │ │ │ │ ├── et.js │ │ │ │ │ ├── fi.js │ │ │ │ │ ├── nb.js │ │ │ │ │ ├── th.js │ │ │ │ │ ├── sv.js │ │ │ │ │ ├── bg.js │ │ │ │ │ ├── hu.js │ │ │ │ │ ├── km.js │ │ │ │ │ ├── ms.js │ │ │ │ │ ├── da.js │ │ │ │ │ ├── en.js │ │ │ │ │ ├── hy.js │ │ │ │ │ ├── he.js │ │ │ │ │ ├── hi.js │ │ │ │ │ ├── fa.js │ │ │ │ │ ├── hr.js │ │ │ │ │ ├── eu.js │ │ │ │ │ ├── mk.js │ │ │ │ │ ├── af.js │ │ │ │ │ ├── de.js │ │ │ │ │ ├── pt-BR.js │ │ │ │ │ ├── lv.js │ │ │ │ │ ├── pt.js │ │ │ │ │ ├── ca.js │ │ │ │ │ ├── fr.js │ │ │ │ │ ├── it.js │ │ │ │ │ ├── ps.js │ │ │ │ │ ├── gl.js │ │ │ │ │ ├── sl.js │ │ │ │ │ ├── es.js │ │ │ │ │ ├── nl.js │ │ │ │ │ ├── ro.js │ │ │ │ │ ├── lt.js │ │ │ │ │ ├── pl.js │ │ │ │ │ ├── el.js │ │ │ │ │ ├── bs.js │ │ │ │ │ ├── sr.js │ │ │ │ │ ├── uk.js │ │ │ │ │ ├── sr-Cyrl.js │ │ │ │ │ ├── ru.js │ │ │ │ │ ├── dsb.js │ │ │ │ │ ├── hsb.js │ │ │ │ │ ├── cs.js │ │ │ │ │ └── sk.js │ │ │ └── ajax-hook │ │ │ │ └── ajaxhook.min.js │ │ ├── css │ │ │ └── job.css │ │ └── js │ │ │ └── skill.js │ ├── templates │ │ ├── common │ │ │ ├── footer.html │ │ │ ├── header.html │ │ │ ├── left.html │ │ │ ├── layout.html │ │ │ └── right.html │ │ ├── skill.html │ │ ├── index.html │ │ └── job.html │ ├── application.properties │ ├── banner.txt │ ├── application-dev.properties │ └── mapper │ │ └── JobMapper.xml │ └── java │ └── com │ └── iszhouhua │ ├── config │ ├── Const.java │ ├── MyApplicationRunner.java │ └── RedisConfig.java │ ├── ZhaopinApplication.java │ ├── model │ └── Job.java │ ├── util │ ├── UserAgentUtil.java │ └── SpringUtil.java │ ├── controller │ ├── IndexController.java │ └── DataController.java │ ├── spider │ └── ZhaopinQuartz.java │ ├── mapper │ └── JobMapper.java │ └── service │ └── SkillService.java ├── .gitignore ├── sql └── zhaopin.sql ├── README.md └── pom.xml /src/main/resources/static/html/zhaopin_files/hm.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/static/images/20190213171158.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/images/20190213171158.png -------------------------------------------------------------------------------- /src/main/resources/static/images/20190213171647.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/images/20190213171647.png -------------------------------------------------------------------------------- /src/main/resources/static/images/20190213171658.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/images/20190213171658.png -------------------------------------------------------------------------------- /src/main/resources/static/images/20190213171706.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/images/20190213171706.png -------------------------------------------------------------------------------- /src/main/resources/static/html/zhaopin_files/best-tag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/html/zhaopin_files/best-tag.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/icons.png -------------------------------------------------------------------------------- /src/main/resources/static/html/zhaopin_files/detailviph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/html/zhaopin_files/detailviph.png -------------------------------------------------------------------------------- /src/main/resources/static/html/zhaopin_files/detailvipm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/html/zhaopin_files/detailvipm.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/avatar.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/avatar04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/avatar04.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/avatar2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/avatar2.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/avatar3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/avatar3.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/avatar5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/avatar5.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/boxed-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/boxed-bg.jpg -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/boxed-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/boxed-bg.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/photo1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/photo1.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/photo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/photo2.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/photo3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/photo3.jpg -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/photo4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/photo4.jpg -------------------------------------------------------------------------------- /src/main/resources/static/html/zhaopin_files/1-resume.a3759d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/html/zhaopin_files/1-resume.a3759d.png -------------------------------------------------------------------------------- /src/main/resources/static/html/zhaopin_files/adv-tojoy.798a32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/html/zhaopin_files/adv-tojoy.798a32.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/credit/cirrus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/credit/cirrus.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/credit/mestro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/credit/mestro.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/credit/paypal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/credit/paypal.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/credit/visa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/credit/visa.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/default-50x50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/default-50x50.gif -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/user1-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/user1-128x128.jpg -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/user2-160x160.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/user2-160x160.jpg -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/user3-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/user3-128x128.jpg -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/user4-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/user4-128x128.jpg -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/user5-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/user5-128x128.jpg -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/user6-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/user6-128x128.jpg -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/user7-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/user7-128x128.jpg -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/user8-128x128.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/user8-128x128.jpg -------------------------------------------------------------------------------- /src/main/resources/static/html/zhaopin_files/app_qrcode.10daec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/html/zhaopin_files/app_qrcode.10daec.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/credit/paypal2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/credit/paypal2.png -------------------------------------------------------------------------------- /src/main/resources/static/html/zhaopin_files/zhaopin_logo.465947.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/html/zhaopin_files/zhaopin_logo.465947.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/credit/mastercard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/credit/mastercard.png -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/img/credit/american-express.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/admin-lte/img/credit/american-express.png -------------------------------------------------------------------------------- /src/main/resources/static/html/zhaopin_files/3-miniprogram-qrcode.35c2b4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/html/zhaopin_files/3-miniprogram-qrcode.35c2b4.jpg -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/less/screen-reader.less: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { .sr-only(); } 5 | .sr-only-focusable { .sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iszhouhua/zhaopin/HEAD/src/main/resources/static/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only(); } 5 | .sr-only-focusable { @include sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /src/main/resources/templates/common/footer.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/HELP-US-OUT.txt: -------------------------------------------------------------------------------- 1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, 2 | Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, 3 | comprehensive icon sets or copy and paste your own. 4 | 5 | Please. Check it out. 6 | 7 | -Dave Gandy 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### STS ### 2 | .apt_generated 3 | .classpath 4 | .factorypath 5 | .project 6 | .settings 7 | .springBeans 8 | 9 | ### IntelliJ IDEA ### 10 | .idea 11 | *.iws 12 | *.iml 13 | *.ipr 14 | 15 | ### NetBeans ### 16 | nbproject/private/ 17 | build/ 18 | nbbuild/ 19 | dist/ 20 | nbdist/ 21 | .nb-gradle/ 22 | 23 | ###my own### 24 | logs 25 | upload 26 | target 27 | tale.sql 28 | example 29 | /src/test 30 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=8088 2 | 3 | # mybatis 4 | mybatis.mapper-locations=classpath:mapper/*.xml 5 | mybatis.type-aliases-package=com.iszhouhua.model 6 | 7 | # thymeleaf 8 | spring.thymeleaf.prefix=classpath:/templates/ 9 | spring.thymeleaf.check-template-location=true 10 | spring.thymeleaf.suffix=.html 11 | spring.thymeleaf.encoding=UTF-8 12 | 13 | spring.mvc.favicon.enabled=false 14 | 15 | # application-dev.properties 16 | spring.profiles.active=dev 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | ${AnsiColor.BRIGHT_YELLOW} 2 | 3 | _ _ __ _ 4 | ___ | |_ __ _ ___ | '_ \ (_) _ _ 5 | |_ / | ' \ / _` | / _ \ | .__/ | | | ' \ 6 | _/__| |_||_| \__,_| \___/ |_|__ _|_|_ |_||_| 7 | _|"""""| _|"""""| _|"""""| _|"""""| _|"""""| _|"""""| _|"""""| 8 | "`-0-0-' "`-0-0-' "`-0-0-' "`-0-0-' "`-0-0-' "`-0-0-' "`-0-0-' 9 | 10 | ${AnsiColor.BLUE} 11 | ::: Project (version:${application.version}) ::: Spring-Boot ${spring-boot.version} 12 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | @import "screen-reader"; 19 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/bootstrap/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt spider. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /src/main/resources/templates/common/header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 招聘 6 | 招聘信息统计平台 7 | 8 | 9 | 10 | 11 | 12 | 13 | 切换导航 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | @import "screen-reader.less"; 19 | -------------------------------------------------------------------------------- /src/main/java/com/iszhouhua/config/Const.java: -------------------------------------------------------------------------------- 1 | package com.iszhouhua.config; 2 | 3 | /** 4 | * @author ZhouHua 5 | * @date 2018/7/25 6 | */ 7 | public class Const { 8 | /** 9 | * 爬虫超时时间,单位毫秒 10 | */ 11 | public static final int TIMEOUT=10000; 12 | /** 13 | * 智联搜索页链接 14 | */ 15 | public static final String ZHAOPIN_URL = "https://sou.zhaopin.com/jobs/searchresult.ashx"; 16 | /** 17 | * 智联用于去重的redis key 18 | */ 19 | public static final String ZHAOPIN_DISTINCT_KEY="zhaopin"; 20 | /** 21 | * 智联用于存储待抓取的详情页的redis key 22 | */ 23 | public static final String ZHAOPIN_PENDING_KEY="zhaopin_pending"; 24 | } 25 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/zh-TW.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-TW",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="請刪掉"+t+"個字元";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="請再輸入"+t+"個字元";return n},loadingMore:function(){return"載入中…"},maximumSelected:function(e){var t="你只能選擇最多"+e.maximum+"項";return t},noResults:function(){return"沒有找到相符的項目"},searching:function(){return"搜尋中…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/zh-CN.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="请删除"+t+"个字符";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="请再输入至少"+t+"个字符";return n},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(e){var t="最多只能选择"+e.maximum+"个项目";return t},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/az.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/az",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return t+" simvol silin"},inputTooShort:function(e){var t=e.minimum-e.input.length;return t+" simvol daxil edin"},loadingMore:function(){return"Daha çox nəticə yüklənir…"},maximumSelected:function(e){return"Sadəcə "+e.maximum+" element seçə bilərsiniz"},noResults:function(){return"Nəticə tapılmadı"},searching:function(){return"Axtarılır…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/ja.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ja",[],function(){return{errorLoading:function(){return"結果が読み込まれませんでした"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" 文字を削除してください";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="少なくとも "+t+" 文字を入力してください";return n},loadingMore:function(){return"読み込み中…"},maximumSelected:function(e){var t=e.maximum+" 件しか選択できません";return t},noResults:function(){return"対象が見つかりません"},searching:function(){return"検索しています…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/ko.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="너무 깁니다. "+t+" 글자 지워주세요.";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="너무 짧습니다. "+t+" 글자 더 입력해주세요.";return n},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(e){var t="최대 "+e.maximum+"개까지만 선택 가능합니다.";return t},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/ar.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ar",[],function(){return{errorLoading:function(){return"لا يمكن تحميل النتائج"},inputTooLong:function(e){var t=e.input.length-e.maximum;return"الرجاء حذف "+t+" عناصر"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"الرجاء إضافة "+t+" عناصر"},loadingMore:function(){return"جاري تحميل نتائج إضافية..."},maximumSelected:function(e){return"تستطيع إختيار "+e.maximum+" بنود فقط"},noResults:function(){return"لم يتم العثور على أي نتائج"},searching:function(){return"جاري البحث…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/id.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/id",[],function(){return{errorLoading:function(){return"Data tidak boleh diambil."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Hapuskan "+t+" huruf"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Masukkan "+t+" huruf lagi"},loadingMore:function(){return"Mengambil data…"},maximumSelected:function(e){return"Anda hanya dapat memilih "+e.maximum+" pilihan"},noResults:function(){return"Tidak ada data yang sesuai"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/vi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/vi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vui lòng nhập ít hơn "+t+" ký tự";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vui lòng nhập nhiều hơn "+t+" ký tự";return n},loadingMore:function(){return"Đang lấy thêm kết quả…"},maximumSelected:function(e){var t="Chỉ có thể chọn được "+e.maximum+" lựa chọn";return t},noResults:function(){return"Không tìm thấy kết quả"},searching:function(){return"Đang tìm…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/is.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/is",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vinsamlegast styttið texta um "+t+" staf";return t<=1?n:n+"i"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vinsamlegast skrifið "+t+" staf";return t>1&&(n+="i"),n+=" í viðbót",n},loadingMore:function(){return"Sæki fleiri niðurstöður…"},maximumSelected:function(e){return"Þú getur aðeins valið "+e.maximum+" atriði"},noResults:function(){return"Ekkert fannst"},searching:function(){return"Leita…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/application-dev.properties: -------------------------------------------------------------------------------- 1 | # db config 2 | spring.datasource.driverClassName=com.mysql.jdbc.Driver 3 | spring.datasource.url=jdbc:mysql://127.0.0.1/zhaopin?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true 4 | spring.datasource.username=root 5 | spring.datasource.password=123456 6 | 7 | # Redis 8 | spring.redis.database=0 9 | spring.redis.host=127.0.0.1 10 | spring.redis.port=6379 11 | spring.redis.password=123456 12 | spring.redis.timeout=30s 13 | spring.redis.lettuce.pool.max-active=100 14 | spring.redis.lettuce.pool.max-idle=100 15 | spring.redis.lettuce.pool.max-wait=60s 16 | spring.redis.lettuce.pool.min-idle=0 17 | 18 | spring.thymeleaf.cache=false 19 | 20 | # logging config 21 | logging.file=logs/zhaopin.log 22 | #logging.level.com.iszhouhua=DEBUG 23 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/tr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/tr",[],function(){return{errorLoading:function(){return"Sonuç yüklenemedi"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" karakter daha girmelisiniz";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="En az "+t+" karakter daha girmelisiniz";return n},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(e){var t="Sadece "+e.maximum+" seçim yapabilirsiniz";return t},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/et.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/et",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" vähem",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" rohkem",n},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var t="Saad vaid "+e.maximum+" tulemus";return e.maximum==1?t+="e":t+="t",t+=" valida",t},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/fi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fi",[],function(){return{errorLoading:function(){return"Tuloksia ei saatu ladattua."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Ole hyvä ja anna "+t+" merkkiä vähemmän"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Ole hyvä ja anna "+t+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(e){return"Voit valita ainoastaan "+e.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){return"Haetaan…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/nb.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nb",[],function(){return{errorLoading:function(){return"Kunne ikke hente resultater."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Vennligst fjern "+t+" tegn"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vennligst skriv inn "+t+" tegn til";return n+" tegn til"},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/th.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/th",[],function(){return{errorLoading:function(){return"ไม่สามารถค้นข้อมูลได้"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="โปรดลบออก "+t+" ตัวอักษร";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="โปรดพิมพ์เพิ่มอีก "+t+" ตัวอักษร";return n},loadingMore:function(){return"กำลังค้นข้อมูลเพิ่ม…"},maximumSelected:function(e){var t="คุณสามารถเลือกได้ไม่เกิน "+e.maximum+" รายการ";return t},noResults:function(){return"ไม่พบข้อมูล"},searching:function(){return"กำลังค้นข้อมูล…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/sv.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sv",[],function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vänligen sudda ut "+t+" tecken";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vänligen skriv in "+t+" eller fler tecken";return n},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(e){var t="Du kan max välja "+e.maximum+" element";return t},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/bg.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/bg",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Моля въведете с "+t+" по-малко символ";return t>1&&(n+="a"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Моля въведете още "+t+" символ";return t>1&&(n+="a"),n},loadingMore:function(){return"Зареждат се още…"},maximumSelected:function(e){var t="Можете да направите до "+e.maximum+" ";return e.maximum>1?t+="избора":t+="избор",t},noResults:function(){return"Няма намерени съвпадения"},searching:function(){return"Търсене…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/hu.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hu",[],function(){return{errorLoading:function(){return"Az eredmények betöltése nem sikerült."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Túl hosszú. "+t+" karakterrel több, mint kellene."},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Túl rövid. Még "+t+" karakter hiányzik."},loadingMore:function(){return"Töltés…"},maximumSelected:function(e){return"Csak "+e.maximum+" elemet lehet kiválasztani."},noResults:function(){return"Nincs találat."},searching:function(){return"Keresés…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/km.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/km",[],function(){return{errorLoading:function(){return"មិនអាចទាញយកទិន្នន័យ"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="សូមលុបចេញ "+t+" អក្សរ";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="សូមបញ្ចូល"+t+" អក្សរ រឺ ច្រើនជាងនេះ";return n},loadingMore:function(){return"កំពុងទាញយកទិន្នន័យបន្ថែម..."},maximumSelected:function(e){var t="អ្នកអាចជ្រើសរើសបានតែ "+e.maximum+" ជម្រើសប៉ុណ្ណោះ";return t},noResults:function(){return"មិនមានលទ្ធផល"},searching:function(){return"កំពុងស្វែងរក..."}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/ms.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ms",[],function(){return{errorLoading:function(){return"Keputusan tidak berjaya dimuatkan."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Sila hapuskan "+t+" aksara"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Sila masukkan "+t+" atau lebih aksara"},loadingMore:function(){return"Sedang memuatkan keputusan…"},maximumSelected:function(e){return"Anda hanya boleh memilih "+e.maximum+" pilihan"},noResults:function(){return"Tiada padanan yang ditemui"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/da.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/da",[],function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Angiv venligst "+t+" tegn mindre"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Angiv venligst "+t+" tegn mere"},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var t="Du kan kun vælge "+e.maximum+" emne";return e.maximum!=1&&(t+="r"),t},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/en.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Please delete "+t+" character";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Please enter "+t+" or more characters";return n},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/hy.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hy",[],function(){return{errorLoading:function(){return"Արդյունքները հնարավոր չէ բեռնել։"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Խնդրում ենք հեռացնել "+t+" նշան";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Խնդրում ենք մուտքագրել "+t+" կամ ավել նշաններ";return n},loadingMore:function(){return"Բեռնվում են նոր արդյունքներ․․․"},maximumSelected:function(e){var t="Դուք կարող եք ընտրել առավելագույնը "+e.maximum+" կետ";return t},noResults:function(){return"Արդյունքներ չեն գտնվել"},searching:function(){return"Որոնում․․․"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/html/zhaopin_files/manifest.web.54250c.js: -------------------------------------------------------------------------------- 1 | !function(n){var r=window.webpackJsonp;window.webpackJsonp=function(e,c,u){for(var p,f,i,a=0,l=[];a1&&(n=t+" अक्षरों को हटा दें "),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="कृपया "+t+" या अधिक अक्षर दर्ज करें";return n},loadingMore:function(){return"अधिक परिणाम लोड हो रहे है..."},maximumSelected:function(e){var t="आप केवल "+e.maximum+" आइटम का चयन कर सकते हैं";return t},noResults:function(){return"कोई परिणाम नहीं मिला"},searching:function(){return"खोज रहा है..."}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/fa.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fa",[],function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="لطفاً "+t+" کاراکتر را حذف نمایید";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="لطفاً تعداد "+t+" کاراکتر یا بیشتر وارد نمایید";return n},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(e){var t="شما تنها میتوانید "+e.maximum+" آیتم را انتخاب نمایید";return t},noResults:function(){return"هیچ نتیجهای یافت نشد"},searching:function(){return"در حال جستجو..."}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/hr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hr",[],function(){function e(e){var t=" "+e+" znak";return e%10<5&&e%10>0&&(e%100<5||e%100>19)?e%10>1&&(t+="a"):t+="ova",t}return{errorLoading:function(){return"Preuzimanje nije uspjelo."},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Unesite "+e(n)},inputTooShort:function(t){var n=t.minimum-t.input.length;return"Unesite još "+e(n)},loadingMore:function(){return"Učitavanje rezultata…"},maximumSelected:function(e){return"Maksimalan broj odabranih stavki je "+e.maximum},noResults:function(){return"Nema rezultata"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/eu.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/eu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gutxiago",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gehiago",n},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return e.maximum===1?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/mk.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/mk",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Ве молиме внесете "+e.maximum+" помалку карактер";return e.maximum!==1&&(n+="и"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Ве молиме внесете уште "+e.maximum+" карактер";return e.maximum!==1&&(n+="и"),n},loadingMore:function(){return"Вчитување резултати…"},maximumSelected:function(e){var t="Можете да изберете само "+e.maximum+" ставк";return e.maximum===1?t+="а":t+="и",t},noResults:function(){return"Нема пронајдено совпаѓања"},searching:function(){return"Пребарување…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/css/job.css: -------------------------------------------------------------------------------- 1 | .chart{ 2 | height:666px; 3 | } 4 | 5 | .zp-search-common { 6 | width: auto; 7 | position: relative; 8 | font-size: 0; 9 | } 10 | .zp-search-input { 11 | display: inline-block; 12 | vertical-align: top; 13 | width: 400px; 14 | height: 34px; 15 | margin-left: -5px; 16 | border-style: solid; 17 | border-color: rgb(210, 214, 222); 18 | border-width: 1px 0px 1px 1px; 19 | text-indent: 20px; 20 | font-size: 12px; 21 | } 22 | .zp-search-btn { 23 | display: inline-block; 24 | vertical-align: top; 25 | width: 80px; 26 | line-height: 34px; 27 | height: 34px; 28 | text-align: center; 29 | background: #1787fb; 30 | color: #fff; 31 | font-size: 14px; 32 | } 33 | 34 | .select2-container .select2-selection--single{ 35 | height:34px; 36 | line-height: 34px; 37 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/af.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/af",[],function(){return{errorLoading:function(){return"Die resultate kon nie gelaai word nie."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Verwyders asseblief "+t+" character";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Voer asseblief "+t+" of meer karakters";return n},loadingMore:function(){return"Meer resultate word gelaai…"},maximumSelected:function(e){var t="Kies asseblief net "+e.maximum+" item";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"Geen resultate gevind"},searching:function(){return"Besig…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/de.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/de",[],function(){return{errorLoading:function(){return"Die Ergebnisse konnten nicht geladen werden."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Bitte "+t+" Zeichen weniger eingeben"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Bitte "+t+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var t="Sie können nur "+e.maximum+" Eintr";return e.maximum===1?t+="ag":t+="äge",t+=" auswählen",t},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/java/com/iszhouhua/ZhaopinApplication.java: -------------------------------------------------------------------------------- 1 | package com.iszhouhua; 2 | 3 | import org.mybatis.spring.annotation.MapperScan; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.boot.builder.SpringApplicationBuilder; 7 | import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; 8 | 9 | @MapperScan("com.iszhouhua.mapper") 10 | @SpringBootApplication 11 | public class ZhaopinApplication extends SpringBootServletInitializer { 12 | 13 | @Override 14 | protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 15 | return application.sources(ZhaopinApplication.class); 16 | } 17 | 18 | public static void main(String[] args) { 19 | SpringApplication.run(ZhaopinApplication.class, args); 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/pt-BR.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt-BR",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Apague "+t+" caracter";return t!=1&&(n+="es"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Digite "+t+" ou mais caracteres";return n},loadingMore:function(){return"Carregando mais resultados…"},maximumSelected:function(e){var t="Você só pode selecionar "+e.maximum+" ite";return e.maximum==1?t+="m":t+="ns",t},noResults:function(){return"Nenhum resultado encontrado"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/lv.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lv",[],function(){function e(e,t,n,r){return e===11?t:e%10===1?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Lūdzu ievadiet par "+n;return r+=" simbol"+e(n,"iem","u","iem"),r+" mazāk"},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Lūdzu ievadiet vēl "+n;return r+=" simbol"+e(n,"us","u","us"),r},loadingMore:function(){return"Datu ielāde…"},maximumSelected:function(t){var n="Jūs varat izvēlēties ne vairāk kā "+t.maximum;return n+=" element"+e(t.maximum,"us","u","us"),n},noResults:function(){return"Sakritību nav"},searching:function(){return"Meklēšana…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/pt.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor apague "+t+" ";return n+=t!=1?"caracteres":"caractere",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Introduza "+t+" ou mais caracteres";return n},loadingMore:function(){return"A carregar mais resultados…"},maximumSelected:function(e){var t="Apenas pode seleccionar "+e.maximum+" ";return t+=e.maximum!=1?"itens":"item",t},noResults:function(){return"Sem resultados"},searching:function(){return"A procurar…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/ca.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ca",[],function(){return{errorLoading:function(){return"La càrrega ha fallat"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Si us plau, elimina "+t+" car";return t==1?n+="àcter":n+="àcters",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Si us plau, introdueix "+t+" car";return t==1?n+="àcter":n+="àcters",n},loadingMore:function(){return"Carregant més resultats…"},maximumSelected:function(e){var t="Només es pot seleccionar "+e.maximum+" element";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No s'han trobat resultats"},searching:function(){return"Cercant…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/fr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fr",[],function(){return{errorLoading:function(){return"Les résultats ne peuvent pas être chargés."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Supprimez "+t+" caractère"+(t>1)?"s":""},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Saisissez au moins "+t+" caractère"+(t>1)?"s":""},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){return"Vous pouvez seulement sélectionner "+e.maximum+" élément"+(e.maximum>1)?"s":""},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/it.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/it",[],function(){return{errorLoading:function(){return"I risultati non possono essere caricati."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Per favore cancella "+t+" caratter";return t!==1?n+="i":n+="e",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Per favore inserisci "+t+" o più caratteri";return n},loadingMore:function(){return"Caricando più risultati…"},maximumSelected:function(e){var t="Puoi selezionare solo "+e.maximum+" element";return e.maximum!==1?t+="i":t+="o",t},noResults:function(){return"Nessun risultato trovato"},searching:function(){return"Sto cercando…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/ps.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ps",[],function(){return{errorLoading:function(){return"پايلي نه سي ترلاسه کېدای"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="د مهربانۍ لمخي "+t+" توری ړنګ کړئ";return t!=1&&(n=n.replace("توری","توري")),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="لږ تر لږه "+t+" يا ډېر توري وليکئ";return n},loadingMore:function(){return"نوري پايلي ترلاسه کيږي..."},maximumSelected:function(e){var t="تاسو يوازي "+e.maximum+" قلم په نښه کولای سی";return e.maximum!=1&&(t=t.replace("قلم","قلمونه")),t},noResults:function(){return"پايلي و نه موندل سوې"},searching:function(){return"لټول کيږي..."}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/gl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/gl",[],function(){return{errorLoading:function(){return"Non foi posíbel cargar os resultados."},inputTooLong:function(e){var t=e.input.length-e.maximum;return t===1?"Elimine un carácter":"Elimine "+t+" caracteres"},inputTooShort:function(e){var t=e.minimum-e.input.length;return t===1?"Engada un carácter":"Engada "+t+" caracteres"},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){return e.maximum===1?"Só pode seleccionar un elemento":"Só pode seleccionar "+e.maximum+" elementos"},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/sl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sl",[],function(){return{errorLoading:function(){return"Zadetkov iskanja ni bilo mogoče naložiti."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Prosim zbrišite "+t+" znak";return t==2?n+="a":t!=1&&(n+="e"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Prosim vpišite še "+t+" znak";return t==2?n+="a":t!=1&&(n+="e"),n},loadingMore:function(){return"Nalagam več zadetkov…"},maximumSelected:function(e){var t="Označite lahko največ "+e.maximum+" predmet";return e.maximum==2?t+="a":e.maximum!=1&&(t+="e"),t},noResults:function(){return"Ni zadetkov."},searching:function(){return"Iščem…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/es.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/es",[],function(){return{errorLoading:function(){return"No se pudieron cargar los resultados"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor, elimine "+t+" car";return t==1?n+="ácter":n+="acteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Por favor, introduzca "+t+" car";return t==1?n+="ácter":n+="acteres",n},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var t="Sólo puede seleccionar "+e.maximum+" elemento";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/nl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nl",[],function(){return{errorLoading:function(){return"De resultaten konden niet worden geladen."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Gelieve "+t+" karakters te verwijderen";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Gelieve "+t+" of meer karakters in te voeren";return n},loadingMore:function(){return"Meer resultaten laden…"},maximumSelected:function(e){var t=e.maximum==1?"kan":"kunnen",n="Er "+t+" maar "+e.maximum+" item";return e.maximum!=1&&(n+="s"),n+=" worden geselecteerd",n},noResults:function(){return"Geen resultaten gevonden…"},searching:function(){return"Zoeken…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/ro.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ro",[],function(){return{errorLoading:function(){return"Rezultatele nu au putut fi incărcate."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vă rugăm să ștergeți"+t+" caracter";return t!==1&&(n+="e"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vă rugăm să introduceți "+t+" sau mai multe caractere";return n},loadingMore:function(){return"Se încarcă mai multe rezultate…"},maximumSelected:function(e){var t="Aveți voie să selectați cel mult "+e.maximum;return t+=" element",e.maximum!==1&&(t+="e"),t},noResults:function(){return"Nu au fost găsite rezultate"},searching:function(){return"Căutare…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/lt.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lt",[],function(){function e(e,t,n,r){return e%10===1&&(e%100<11||e%100>19)?t:e%10>=2&&e%10<=9&&(e%100<11||e%100>19)?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Pašalinkite "+n+" simbol";return r+=e(n,"į","ius","ių"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Įrašykite dar "+n+" simbol";return r+=e(n,"į","ius","ių"),r},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(t){var n="Jūs galite pasirinkti tik "+t.maximum+" element";return n+=e(t.maximum,"ą","us","ų"),n},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/pl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pl",[],function(){var e=["znak","znaki","znaków"],t=["element","elementy","elementów"],n=function(t,n){if(t===1)return n[0];if(t>1&&t<=4)return n[1];if(t>=5)return n[2]};return{errorLoading:function(){return"Nie można załadować wyników."},inputTooLong:function(t){var r=t.input.length-t.maximum;return"Usuń "+r+" "+n(r,e)},inputTooShort:function(t){var r=t.minimum-t.input.length;return"Podaj przynajmniej "+r+" "+n(r,e)},loadingMore:function(){return"Trwa ładowanie…"},maximumSelected:function(e){return"Możesz zaznaczyć tylko "+e.maximum+" "+n(e.maximum,t)},noResults:function(){return"Brak wyników"},searching:function(){return"Trwa wyszukiwanie…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/el.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/el",[],function(){return{errorLoading:function(){return"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Παρακαλώ διαγράψτε "+t+" χαρακτήρ";return t==1&&(n+="α"),t!=1&&(n+="ες"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Παρακαλώ συμπληρώστε "+t+" ή περισσότερους χαρακτήρες";return n},loadingMore:function(){return"Φόρτωση περισσότερων αποτελεσμάτων…"},maximumSelected:function(e){var t="Μπορείτε να επιλέξετε μόνο "+e.maximum+" επιλογ";return e.maximum==1&&(t+="ή"),e.maximum!=1&&(t+="ές"),t},noResults:function(){return"Δεν βρέθηκαν αποτελέσματα"},searching:function(){return"Αναζήτηση…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/bs.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/bs",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Preuzimanje nije uspijelo."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Obrišite "+n+" simbol";return r+=e(n,"","a","a"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Ukucajte bar još "+n+" simbol";return r+=e(n,"","a","a"),r},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(t){var n="Možete izabrati samo "+t.maximum+" stavk";return n+=e(t.maximum,"u","e","i"),n},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/sr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Preuzimanje nije uspelo."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Obrišite "+n+" simbol";return r+=e(n,"","a","a"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Ukucajte bar još "+n+" simbol";return r+=e(n,"","a","a"),r},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(t){var n="Možete izabrati samo "+t.maximum+" stavk";return n+=e(t.maximum,"u","e","i"),n},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/uk.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/uk",[],function(){function e(e,t,n,r){return e%100>10&&e%100<15?r:e%10===1?t:e%10>1&&e%10<5?n:r}return{errorLoading:function(){return"Неможливо завантажити результати"},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Будь ласка, видаліть "+n+" "+e(t.maximum,"літеру","літери","літер")},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Будь ласка, введіть "+t+" або більше літер"},loadingMore:function(){return"Завантаження інших результатів…"},maximumSelected:function(t){return"Ви можете вибрати лише "+t.maximum+" "+e(t.maximum,"пункт","пункти","пунктів")},noResults:function(){return"Нічого не знайдено"},searching:function(){return"Пошук…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/sr-Cyrl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr-Cyrl",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Преузимање није успело."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Обришите "+n+" симбол";return r+=e(n,"","а","а"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Укуцајте бар још "+n+" симбол";return r+=e(n,"","а","а"),r},loadingMore:function(){return"Преузимање још резултата…"},maximumSelected:function(t){var n="Можете изабрати само "+t.maximum+" ставк";return n+=e(t.maximum,"у","е","и"),n},noResults:function(){return"Ништа није пронађено"},searching:function(){return"Претрага…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/ru.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ru",[],function(){function e(e,t,n,r){return e%10<5&&e%10>0&&e%100<5||e%100>20?e%10>1?n:t:r}return{errorLoading:function(){return"Невозможно загрузить результаты"},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Пожалуйста, введите на "+n+" символ";return r+=e(n,"","a","ов"),r+=" меньше",r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Пожалуйста, введите еще хотя бы "+n+" символ";return r+=e(n,"","a","ов"),r},loadingMore:function(){return"Загрузка данных…"},maximumSelected:function(t){var n="Вы можете выбрать не более "+t.maximum+" элемент";return n+=e(t.maximum,"","a","ов"),n},noResults:function(){return"Совпадений не найдено"},searching:function(){return"Поиск…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/dsb.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/dsb",[],function(){var e=["znamuško","znamušce","znamuška","znamuškow"],t=["zapisk","zapiska","zapiski","zapiskow"],n=function(t,n){if(t===1)return n[0];if(t===2)return n[1];if(t>2&&t<=4)return n[2];if(t>=5)return n[3]};return{errorLoading:function(){return"Wuslědki njejsu se dali zacytaś."},inputTooLong:function(t){var r=t.input.length-t.maximum;return"Pšosym lašuj "+r+" "+n(r,e)},inputTooShort:function(t){var r=t.minimum-t.input.length;return"Pšosym zapódaj nanejmjenjej "+r+" "+n(r,e)},loadingMore:function(){return"Dalšne wuslědki se zacytaju…"},maximumSelected:function(e){return"Móžoš jano "+e.maximum+" "+n(e.maximum,t)+"wubraś."},noResults:function(){return"Žedne wuslědki namakane"},searching:function(){return"Pyta se…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/hsb.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hsb",[],function(){var e=["znamješko","znamješce","znamješka","znamješkow"],t=["zapisk","zapiskaj","zapiski","zapiskow"],n=function(t,n){if(t===1)return n[0];if(t===2)return n[1];if(t>2&&t<=4)return n[2];if(t>=5)return n[3]};return{errorLoading:function(){return"Wuslědki njedachu so začitać."},inputTooLong:function(t){var r=t.input.length-t.maximum;return"Prošu zhašej "+r+" "+n(r,e)},inputTooShort:function(t){var r=t.minimum-t.input.length;return"Prošu zapodaj znajmjeńša "+r+" "+n(r,e)},loadingMore:function(){return"Dalše wuslědki so začitaja…"},maximumSelected:function(e){return"Móžeš jenož "+e.maximum+" "+n(e.maximum,t)+"wubrać"},noResults:function(){return"Žane wuslědki namakane"},searching:function(){return"Pyta so…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/templates/common/left.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/main/java/com/iszhouhua/model/Job.java: -------------------------------------------------------------------------------- 1 | package com.iszhouhua.model; 2 | 3 | import lombok.Data; 4 | import java.util.Date; 5 | 6 | @Data 7 | public class Job { 8 | /** 9 | * 职位ID 10 | */ 11 | private String id; 12 | 13 | /** 14 | * 工作城市 15 | */ 16 | private String city; 17 | 18 | /** 19 | * 职位名 20 | */ 21 | private String jobName; 22 | 23 | /** 24 | * 职位链接 25 | */ 26 | private String url; 27 | 28 | /** 29 | * 最低薪资 30 | */ 31 | private Integer minSalary; 32 | 33 | /** 34 | * 最高薪资 35 | */ 36 | private Integer maxSalary; 37 | 38 | /** 39 | * 最低学历 40 | */ 41 | private String education; 42 | 43 | /** 44 | * 工作经验 45 | */ 46 | private String experience; 47 | 48 | /** 49 | * 工作地址 50 | */ 51 | private String address; 52 | 53 | /** 54 | * 职位描述 55 | */ 56 | private String description; 57 | 58 | /** 59 | * 公司名 60 | */ 61 | private String companyName; 62 | 63 | /** 64 | * 创建时间(数据抓取时间) 65 | */ 66 | private Date createTime; 67 | 68 | /** 69 | * 招聘信息发布时间 70 | */ 71 | private Date releaseTime; 72 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/cs.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/cs",[],function(){function e(e,t){switch(e){case 2:return t?"dva":"dvě";case 3:return"tři";case 4:return"čtyři"}return""}return{errorLoading:function(){return"Výsledky nemohly být načteny."},inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím, zadejte o jeden znak méně.":n<=4?"Prosím, zadejte o "+e(n,!0)+" znaky méně.":"Prosím, zadejte o "+n+" znaků méně."},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím, zadejte ještě jeden znak.":n<=4?"Prosím, zadejte ještě další "+e(n,!0)+" znaky.":"Prosím, zadejte ještě dalších "+n+" znaků."},loadingMore:function(){return"Načítají se další výsledky…"},maximumSelected:function(t){var n=t.maximum;return n==1?"Můžete zvolit jen jednu položku.":n<=4?"Můžete zvolit maximálně "+e(n,!1)+" položky.":"Můžete zvolit maximálně "+n+" položek."},noResults:function(){return"Nenalezeny žádné položky."},searching:function(){return"Vyhledávání…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/java/com/iszhouhua/config/MyApplicationRunner.java: -------------------------------------------------------------------------------- 1 | package com.iszhouhua.config; 2 | 3 | import com.iszhouhua.spider.ZhaopinSpider; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.quartz.SchedulerException; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.boot.ApplicationArguments; 8 | import org.springframework.boot.ApplicationRunner; 9 | import org.springframework.data.redis.core.SetOperations; 10 | import org.springframework.stereotype.Component; 11 | 12 | /** 13 | * 启动时检查是否有为抓取完成的详情数据 14 | * @author ZhouHua 15 | * @date 2019/2/12 16 | */ 17 | @Component 18 | @Slf4j 19 | public class MyApplicationRunner implements ApplicationRunner { 20 | 21 | @Autowired 22 | private ZhaopinSpider zhaopinSpider; 23 | 24 | @Autowired 25 | private SetOperations setOperations; 26 | 27 | @Override 28 | public void run(ApplicationArguments var1) throws Exception{ 29 | if(setOperations.size(Const.ZHAOPIN_PENDING_KEY)>0){ 30 | try { 31 | zhaopinSpider.startQuartz(); 32 | } catch (SchedulerException e) { 33 | log.error("定时任务开启失败",e); 34 | } 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /src/main/java/com/iszhouhua/util/UserAgentUtil.java: -------------------------------------------------------------------------------- 1 | package com.iszhouhua.util; 2 | 3 | /** 4 | * @author ZhouHua 5 | * @date 2019/1/26 6 | */ 7 | public class UserAgentUtil { 8 | /** 9 | * userAgent池 10 | */ 11 | private static final String[] userAgents={"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0", 12 | "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36", 13 | "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36", 14 | "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko", 15 | "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763"}; 16 | 17 | /** 18 | * 随机获取一个userAgent 19 | * @return 20 | */ 21 | public static String getUserAgent(){ 22 | int index = (int) (Math.random() * userAgents.length); 23 | return userAgents[index]; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/select2/js/i18n/sk.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sk",[],function(){var e={2:function(e){return e?"dva":"dve"},3:function(){return"tri"},4:function(){return"štyri"}};return{errorLoading:function(){return"Výsledky sa nepodarilo načítať."},inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím, zadajte o jeden znak menej":n>=2&&n<=4?"Prosím, zadajte o "+e[n](!0)+" znaky menej":"Prosím, zadajte o "+n+" znakov menej"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím, zadajte ešte jeden znak":n<=4?"Prosím, zadajte ešte ďalšie "+e[n](!0)+" znaky":"Prosím, zadajte ešte ďalších "+n+" znakov"},loadingMore:function(){return"Načítanie ďalších výsledkov…"},maximumSelected:function(t){return t.maximum==1?"Môžete zvoliť len jednu položku":t.maximum>=2&&t.maximum<=4?"Môžete zvoliť najviac "+e[t.maximum](!1)+" položky":"Môžete zvoliť najviac "+t.maximum+" položiek"},noResults:function(){return"Nenašli sa žiadne položky"},searching:function(){return"Vyhľadávanie…"}}}),{define:e.define,require:e.require}})(); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/ajax-hook/ajaxhook.min.js: -------------------------------------------------------------------------------- 1 | !function(t){function r(n){if(e[n])return e[n].exports;var o=e[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}var e={};return r.m=t,r.c=e,r.p="",r(0)}([function(t,r,e){e(1)(window)},function(t,r){t.exports=function(t){t.hookAjax=function(t){function r(r){return function(){var e=this.hasOwnProperty(r+"_")?this[r+"_"]:this.xhr[r],n=(t[r]||{}).getter;return n&&n(e,this)||e}}function e(r){return function(e){var n=this.xhr,o=this,i=t[r];if("function"==typeof i)n[r]=function(){t[r](o)||e.apply(n,arguments)};else{var a=(i||{}).setter;e=a&&a(e,o)||e;try{n[r]=e}catch(t){this[r+"_"]=e}}}}function n(r){return function(){var e=[].slice.call(arguments);if(!t[r]||!t[r].call(this,e,this.xhr))return this.xhr[r].apply(this.xhr,e)}}window._ahrealxhr=window._ahrealxhr||XMLHttpRequest,XMLHttpRequest=function(){var t=new window._ahrealxhr;Object.defineProperty(this,"xhr",{value:t})};var o=window._ahrealxhr.prototype;for(var i in o){var a="";try{a=typeof o[i]}catch(t){}"function"===a?XMLHttpRequest.prototype[i]=n(i):Object.defineProperty(XMLHttpRequest.prototype,i,{get:r(i),set:e(i),enumerable:!0})}return window._ahrealxhr},t.unHookAjax=function(){window._ahrealxhr&&(XMLHttpRequest=window._ahrealxhr),window._ahrealxhr=void 0},t.default=t}}]); -------------------------------------------------------------------------------- /src/main/java/com/iszhouhua/controller/IndexController.java: -------------------------------------------------------------------------------- 1 | package com.iszhouhua.controller; 2 | 3 | import com.iszhouhua.mapper.JobMapper; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.stereotype.Controller; 6 | import org.springframework.ui.Model; 7 | import org.springframework.web.bind.annotation.GetMapping; 8 | import org.springframework.web.bind.annotation.RequestMapping; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * @author ZhouHua 14 | */ 15 | @Controller 16 | @RequestMapping("/") 17 | public class IndexController { 18 | 19 | @Autowired 20 | private JobMapper jobMapper; 21 | 22 | @GetMapping("") 23 | public String index() { 24 | return "index"; 25 | } 26 | 27 | @GetMapping("job") 28 | public String job(Model model) { 29 | List cityList=jobMapper.selectCity(); 30 | model.addAttribute("cityList",cityList); 31 | return "job"; 32 | } 33 | 34 | @GetMapping("company") 35 | public String company() { 36 | return "company"; 37 | } 38 | 39 | @GetMapping("skill") 40 | public String hello(Model model) { 41 | List cityList=jobMapper.selectCity(); 42 | model.addAttribute("cityList",cityList); 43 | return "skill"; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/alt/AdminLTE-fullcalendar.min.css: -------------------------------------------------------------------------------- 1 | .fc-button{background:#f4f4f4;background-image:none;color:#444;border-color:#ddd;border-bottom-color:#ddd}.fc-button:hover,.fc-button:active,.fc-button.hover{background-color:#e9e9e9}.fc-header-title h2{font-size:15px;line-height:1.6em;color:#666;margin-left:10px}.fc-header-right{padding-right:10px}.fc-header-left{padding-left:10px}.fc-widget-header{background:#fafafa}.fc-grid{width:100%;border:0}.fc-widget-header:first-of-type,.fc-widget-content:first-of-type{border-left:0;border-right:0}.fc-widget-header:last-of-type,.fc-widget-content:last-of-type{border-right:0}.fc-toolbar{padding:10px;margin:0}.fc-day-number{font-size:20px;font-weight:300;padding-right:10px}.fc-color-picker{list-style:none;margin:0;padding:0}.fc-color-picker>li{float:left;font-size:30px;margin-right:5px;line-height:30px}.fc-color-picker>li .fa{-webkit-transition:-webkit-transform linear .3s;-moz-transition:-moz-transform linear .3s;-o-transition:-o-transform linear .3s;transition:transform linear .3s}.fc-color-picker>li .fa:hover{-webkit-transform:rotate(30deg);-ms-transform:rotate(30deg);-o-transform:rotate(30deg);transform:rotate(30deg)}#add-new-event{-webkit-transition:all linear .3s;-o-transition:all linear .3s;transition:all linear .3s}.external-event{padding:5px 10px;font-weight:bold;margin-bottom:4px;box-shadow:0 1px 1px rgba(0,0,0,0.1);text-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;cursor:move}.external-event:hover{box-shadow:inset 0 0 90px rgba(0,0,0,0.2)} -------------------------------------------------------------------------------- /sql/zhaopin.sql: -------------------------------------------------------------------------------- 1 | /* 2 | Navicat MySQL Data Transfer 3 | 4 | Source Server : localhost 5 | Source Server Version : 50721 6 | Source Host : 127.0.0.1:3306 7 | Source Database : zhaopin 8 | 9 | Target Server Type : MYSQL 10 | Target Server Version : 50721 11 | File Encoding : 65001 12 | 13 | Date: 2019-02-13 16:50:43 14 | */ 15 | 16 | SET FOREIGN_KEY_CHECKS=0; 17 | 18 | -- ---------------------------- 19 | -- Table structure for job 20 | -- ---------------------------- 21 | DROP TABLE IF EXISTS `job`; 22 | CREATE TABLE `job` ( 23 | `id` bigint(20) NOT NULL AUTO_INCREMENT, 24 | `city` varchar(20) CHARACTER SET utf8 DEFAULT NULL COMMENT '工作城市', 25 | `job_name` varchar(100) CHARACTER SET utf8 NOT NULL COMMENT '职位名称', 26 | `url` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT '职位链接', 27 | `min_salary` int(10) unsigned DEFAULT NULL COMMENT '最低工资', 28 | `max_salary` int(10) unsigned DEFAULT NULL COMMENT '最高工资', 29 | `education` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '最低学历', 30 | `experience` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '工作经验', 31 | `address` varchar(1000) CHARACTER SET utf8 DEFAULT NULL COMMENT '工作地址', 32 | `description` longtext COMMENT '工作描述', 33 | `company_name` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '公司名', 34 | `release_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '发布时间', 35 | `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', 36 | PRIMARY KEY (`id`), 37 | UNIQUE KEY `uk_url` (`url`) USING HASH 38 | ) ENGINE=MyISAM AUTO_INCREMENT=1236 DEFAULT CHARSET=utf8mb4 COMMENT='工作职位信息表'; 39 | -------------------------------------------------------------------------------- /src/main/java/com/iszhouhua/util/SpringUtil.java: -------------------------------------------------------------------------------- 1 | package com.iszhouhua.util; 2 | 3 | import org.springframework.beans.BeansException; 4 | import org.springframework.context.ApplicationContext; 5 | import org.springframework.context.ApplicationContextAware; 6 | import org.springframework.stereotype.Component; 7 | 8 | @Component 9 | public class SpringUtil implements ApplicationContextAware { 10 | 11 | private static ApplicationContext applicationContext = null; 12 | 13 | @Override 14 | public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 15 | if(SpringUtil.applicationContext == null){ 16 | SpringUtil.applicationContext = applicationContext; 17 | } 18 | } 19 | 20 | /** 21 | * 获取applicationContext 22 | * @return 23 | */ 24 | public static ApplicationContext getApplicationContext() { 25 | return applicationContext; 26 | } 27 | 28 | /** 29 | * 通过name获取 Bean 30 | * @param name 31 | * @return 32 | */ 33 | public static Object getBean(String name){ 34 | return getApplicationContext().getBean(name); 35 | 36 | } 37 | 38 | /** 39 | * 通过class获取Bean 40 | * @return 41 | */ 42 | public static T getBean(Class clazz){ 43 | return getApplicationContext().getBean(clazz); 44 | } 45 | 46 | /** 47 | * 通过name,以及Clazz返回指定的Bean 48 | * @return 49 | */ 50 | public static T getBean(String name,Class clazz){ 51 | return getApplicationContext().getBean(name, clazz); 52 | } 53 | 54 | } 55 | 56 | -------------------------------------------------------------------------------- /src/main/java/com/iszhouhua/spider/ZhaopinQuartz.java: -------------------------------------------------------------------------------- 1 | package com.iszhouhua.spider; 2 | 3 | import com.iszhouhua.config.Const; 4 | import com.iszhouhua.mapper.JobMapper; 5 | import com.iszhouhua.model.Job; 6 | import com.iszhouhua.util.UserAgentUtil; 7 | import lombok.extern.slf4j.Slf4j; 8 | import org.jsoup.Jsoup; 9 | import org.jsoup.nodes.Document; 10 | import org.quartz.JobExecutionContext; 11 | import org.springframework.beans.factory.annotation.Autowired; 12 | import org.springframework.data.redis.core.SetOperations; 13 | import org.springframework.scheduling.quartz.QuartzJobBean; 14 | import java.io.IOException; 15 | 16 | /** 17 | * 用于抓取详情数据的定时任务 18 | */ 19 | @Slf4j 20 | public class ZhaopinQuartz extends QuartzJobBean { 21 | 22 | @Autowired 23 | private SetOperations setOperations; 24 | 25 | @Autowired 26 | private JobMapper jobMapper; 27 | 28 | @Override 29 | protected void executeInternal(JobExecutionContext jobExecutionContext) { 30 | String url=setOperations.pop(Const.ZHAOPIN_PENDING_KEY).toString(); 31 | Document doc; 32 | try { 33 | doc = Jsoup.connect(url) 34 | .userAgent(UserAgentUtil.getUserAgent()) 35 | .timeout(Const.TIMEOUT).get(); 36 | } catch (IOException e) { 37 | log.error("链接请求失败",e); 38 | return; 39 | } 40 | Job job=new Job(); 41 | job.setUrl(url); 42 | job.setAddress(doc.select("p.add-txt").text()); 43 | job.setDescription(doc.select("div.pos-ul").text()); 44 | jobMapper.updateByIdOrUrl(job); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 招聘信息统计平台 2 | 3 | ## 1.数据来源 4 | 5 | ~~招聘信息的数据来源为智联招聘,根据智联搜索规则对工作内容进行爬取分析并入库。~~ 6 | 7 | ~~例如链接:~~ 8 | 9 | ~~[http://sou.zhaopin.com/jobs/searchresult.ashx?jl=深圳&kw=java](http://sou.zhaopin.com/jobs/searchresult.ashx?jl=深圳&kw=java) (jl是**城市**,kw为**职位名**),~~ 10 | ~~根据此url解析第一页获取工作数量,智联招聘一页最多显示60条工作职位的信息,一共最多显示90页,~~ 11 | ~~所以我们根据获取的工作数量来确定需要抓取数据的页数,条数大于90页的则获取90页,小于90页的则使用实际页数。~~ 12 | ~~然后根据页数构建出最终的url:[http://sou.zhaopin.com/jobs/searchresult.ashx?jl=深圳&kw=java&p=1](http://sou.zhaopin.com/jobs/searchresult.ashx?jl=深圳&kw=java&p=1)(p为页码)。~~ 13 | ~~最后抓取每一页上对应具体工作的url所对应的工作信息及其公司信息。~~ 14 | 15 | ### 2019/2/13更新 16 | 17 | ==以上抓取方式为老版智联,已不适用于新版本== 18 | 19 | 现在的实现方式是:直接将智联搜索页缓存到项目中,删除部分代码(如首次进入页面会弹出的提示、进入页面立即发送搜索请求等)。 20 | 21 | 智联搜索数据的请求链接格式为:,利用ajaxhook对所有以开头的请求进行拦截,拦截后转发给后端进行抓取。 22 | 23 | 同时,新版智联的列表页由原来的同步变成了异步获取,通过请求上面的链接会得到类似于下面的json格式的数据,通过分析数据可获得职位的一些基本信息。 24 | 25 |  26 | 27 | ## 2.使用技术 28 | 29 | java框架使用的是[SpringBoot](http://spring.io/projects/spring-boot),HTML解析器使用的是[Jsoup](https://jsoup.org/),数据可视化使用的是百度的Javascript的图表库[ECharts](http://echarts.baidu.com/),数据库为[MySQL](https://www.mysql.com/),通过[Redis](https://redis.io/ )对抓取到的链接进行去重处理...... 30 | 31 | 3.界面截图 32 | ---------- 33 | 34 |  35 | 36 |  37 | 38 |  39 | -------------------------------------------------------------------------------- /src/main/java/com/iszhouhua/mapper/JobMapper.java: -------------------------------------------------------------------------------- 1 | package com.iszhouhua.mapper; 2 | 3 | import com.iszhouhua.model.Job; 4 | import org.apache.ibatis.annotations.Param; 5 | import org.apache.ibatis.annotations.Select; 6 | 7 | import java.util.List; 8 | import java.util.Map; 9 | 10 | public interface JobMapper { 11 | /** 12 | * 批量插入职位信息 13 | * @param jobs 职位集合 14 | * @return 15 | */ 16 | int insertBatch(List jobs); 17 | 18 | /** 19 | * 根据ID或者URL修改职位 20 | * @param job 职位信息 21 | * @return 受影响的行数 22 | */ 23 | int updateByIdOrUrl(Job job); 24 | 25 | /** 26 | * 统计工作经验与工资的关系 27 | * @param cityName 城市 28 | * @param jobName 工作关键字 29 | * @return 30 | */ 31 | List countJobForExpAndSalary(@Param("city")String cityName, @Param("jobName")String jobName); 32 | 33 | /** 34 | * 统计学历与工资的关系 35 | * @param cityName 城市名 36 | * @param jobName 工作关键字 37 | * @return 38 | */ 39 | List countJobForEducationAndSalary(@Param("city")String cityName, @Param("jobName")String jobName); 40 | 41 | /** 42 | * 查询描述 43 | * @param cityName 城市名 44 | * @param jobName 工作关键字 45 | * @return 46 | */ 47 | List selectDescriptionByCityAndJobName(@Param("city")String cityName,@Param("jobName")String jobName); 48 | 49 | /** 50 | * 查询所有城市 51 | * @return 52 | */ 53 | @Select("select distinct city from job") 54 | List selectCity(); 55 | 56 | /** 57 | * 统计招聘数前20的城市 58 | * @return 59 | */ 60 | @Select("SELECT city,COUNT(city) total FROM job GROUP BY city ORDER BY total DESC") 61 | List selectCityJobNumber(); 62 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | .fa-icon-rotate(@degrees, @rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; 16 | -webkit-transform: rotate(@degrees); 17 | -ms-transform: rotate(@degrees); 18 | transform: rotate(@degrees); 19 | } 20 | 21 | .fa-icon-flip(@horiz, @vert, @rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; 23 | -webkit-transform: scale(@horiz, @vert); 24 | -ms-transform: scale(@horiz, @vert); 25 | transform: scale(@horiz, @vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | .sr-only() { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | .sr-only-focusable() { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/font-awesome/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | @mixin fa-icon-rotate($degrees, $rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; 16 | -webkit-transform: rotate($degrees); 17 | -ms-transform: rotate($degrees); 18 | transform: rotate($degrees); 19 | } 20 | 21 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; 23 | -webkit-transform: scale($horiz, $vert); 24 | -ms-transform: scale($horiz, $vert); 25 | transform: scale($horiz, $vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | @mixin sr-only { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | @mixin sr-only-focusable { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/main/resources/static/js/skill.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | $('.select2').select2({ 3 | placeholder: "请选择城市", 4 | allowClear: true 5 | }); 6 | var myChart = echarts.init(document.getElementById('skill')); 7 | $.post('skillStatistics').done(function (data) { 8 | // 指定图表的配置项和数据 9 | option = { 10 | title: { 11 | text: '技能要求TOP 50' 12 | }, 13 | tooltip: { 14 | trigger: 'item' 15 | }, 16 | xAxis:{ 17 | type:'value', 18 | position: 'top', 19 | splitLine:{ 20 | show:false 21 | }, 22 | axisTick:{ 23 | show:false 24 | }, 25 | axisLabel:{ 26 | show:true 27 | } 28 | }, 29 | yAxis:{ 30 | type:'category', 31 | inverse:true, 32 | data:data.skill, 33 | splitLine:{ 34 | show:false 35 | }, 36 | axisTick:{ 37 | show:false 38 | } 39 | }, 40 | series: [{ 41 | name:'技能要求TOP 50', 42 | type:'bar', 43 | data:data.total, 44 | color:'red', 45 | label: { 46 | normal: { 47 | position: 'right', 48 | show: true, 49 | color:'black' 50 | } 51 | }, 52 | }], 53 | }; 54 | myChart.setOption(option); 55 | }); 56 | 57 | 58 | function skillStatistics(cityName,jobName) { 59 | $.post('skillStatistics',{"city":cityName,"name":jobName},function(data){ 60 | myChart.setOption({ 61 | yAxis : [{data:data.skill }], 62 | series: [{data:data.total }] 63 | }); 64 | }); 65 | } 66 | 67 | $('#btn_submit').click(function () { 68 | var city=$('#city').select2("val"); 69 | var name=$('#keyword').val(); 70 | skillStatistics(city,name); 71 | }); 72 | }); -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/alt/AdminLTE-fullcalendar.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Plugin: Full Calendar 3 | * --------------------- 4 | */ 5 | .fc-button { 6 | background: #f4f4f4; 7 | background-image: none; 8 | color: #444; 9 | border-color: #ddd; 10 | border-bottom-color: #ddd; 11 | } 12 | .fc-button:hover, 13 | .fc-button:active, 14 | .fc-button.hover { 15 | background-color: #e9e9e9; 16 | } 17 | .fc-header-title h2 { 18 | font-size: 15px; 19 | line-height: 1.6em; 20 | color: #666; 21 | margin-left: 10px; 22 | } 23 | .fc-header-right { 24 | padding-right: 10px; 25 | } 26 | .fc-header-left { 27 | padding-left: 10px; 28 | } 29 | .fc-widget-header { 30 | background: #fafafa; 31 | } 32 | .fc-grid { 33 | width: 100%; 34 | border: 0; 35 | } 36 | .fc-widget-header:first-of-type, 37 | .fc-widget-content:first-of-type { 38 | border-left: 0; 39 | border-right: 0; 40 | } 41 | .fc-widget-header:last-of-type, 42 | .fc-widget-content:last-of-type { 43 | border-right: 0; 44 | } 45 | .fc-toolbar { 46 | padding: 10px; 47 | margin: 0; 48 | } 49 | .fc-day-number { 50 | font-size: 20px; 51 | font-weight: 300; 52 | padding-right: 10px; 53 | } 54 | .fc-color-picker { 55 | list-style: none; 56 | margin: 0; 57 | padding: 0; 58 | } 59 | .fc-color-picker > li { 60 | float: left; 61 | font-size: 30px; 62 | margin-right: 5px; 63 | line-height: 30px; 64 | } 65 | .fc-color-picker > li .fa { 66 | -webkit-transition: -webkit-transform linear 0.3s; 67 | -moz-transition: -moz-transform linear 0.3s; 68 | -o-transition: -o-transform linear 0.3s; 69 | transition: transform linear 0.3s; 70 | } 71 | .fc-color-picker > li .fa:hover { 72 | -webkit-transform: rotate(30deg); 73 | -ms-transform: rotate(30deg); 74 | -o-transform: rotate(30deg); 75 | transform: rotate(30deg); 76 | } 77 | #add-new-event { 78 | -webkit-transition: all linear 0.3s; 79 | -o-transition: all linear 0.3s; 80 | transition: all linear 0.3s; 81 | } 82 | .external-event { 83 | padding: 5px 10px; 84 | font-weight: bold; 85 | margin-bottom: 4px; 86 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); 87 | text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); 88 | border-radius: 3px; 89 | cursor: move; 90 | } 91 | .external-event:hover { 92 | box-shadow: inset 0 0 90px rgba(0, 0, 0, 0.2); 93 | } 94 | -------------------------------------------------------------------------------- /src/main/resources/templates/common/layout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 招聘信息统计平台 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/alt/AdminLTE-select2.min.css: -------------------------------------------------------------------------------- 1 | .select2-container--default.select2-container--focus,.select2-selection.select2-container--focus,.select2-container--default:focus,.select2-selection:focus,.select2-container--default:active,.select2-selection:active{outline:none}.select2-container--default .select2-selection--single,.select2-selection .select2-selection--single{border:1px solid #d2d6de;border-radius:0;padding:6px 12px;height:34px}.select2-container--default.select2-container--open{border-color:#3c8dbc}.select2-dropdown{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#3c8dbc;color:white}.select2-results__option{padding:6px 12px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{padding-left:0;padding-right:0;height:auto;margin-top:-4px}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:6px;padding-left:20px}.select2-container--default .select2-selection--single .select2-selection__arrow{height:28px;right:3px}.select2-container--default .select2-selection--single .select2-selection__arrow b{margin-top:0}.select2-dropdown .select2-search__field,.select2-search--inline .select2-search__field{border:1px solid #d2d6de}.select2-dropdown .select2-search__field:focus,.select2-search--inline .select2-search__field:focus{outline:none}.select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default .select2-search--dropdown .select2-search__field{border-color:#3c8dbc !important}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[aria-selected=true]:hover{color:#444}.select2-container--default .select2-selection--multiple{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-selection--multiple:focus{border-color:#3c8dbc}.select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#d2d6de}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc;border-color:#367fa9;padding:1px 10px;color:#fff}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{margin-right:5px;color:rgba(255,255,255,0.7)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container .select2-selection--single .select2-selection__rendered{padding-right:10px} -------------------------------------------------------------------------------- /src/main/resources/templates/skill.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 技能统计 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 技能统计 19 | 统计岗位需求技能 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 选择城市和职位 29 | 30 | 31 | 32 | 33 | 34 | 城市: 35 | 36 | 全国 37 | 38 | 39 | 40 | 41 | 工作: 42 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 技能要求 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/skins/skin-red.min.css: -------------------------------------------------------------------------------- 1 | .skin-red .main-header .navbar{background-color:#dd4b39}.skin-red .main-header .navbar .nav>li>a{color:#fff}.skin-red .main-header .navbar .nav>li>a:hover,.skin-red .main-header .navbar .nav>li>a:active,.skin-red .main-header .navbar .nav>li>a:focus,.skin-red .main-header .navbar .nav .open>a,.skin-red .main-header .navbar .nav .open>a:hover,.skin-red .main-header .navbar .nav .open>a:focus,.skin-red .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red .main-header .logo{background-color:#d73925;color:#fff;border-bottom:0 solid transparent}.skin-red .main-header .logo:hover{background-color:#d33724}.skin-red .main-header li.user-header{background-color:#dd4b39}.skin-red .content-header{background:transparent}.skin-red .wrapper,.skin-red .main-sidebar,.skin-red .left-side{background-color:#222d32}.skin-red .user-panel>.info,.skin-red .user-panel>.info>a{color:#fff}.skin-red .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-red .sidebar-menu>li>a{border-left:3px solid transparent}.skin-red .sidebar-menu>li:hover>a,.skin-red .sidebar-menu>li.active>a,.skin-red .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-red .sidebar-menu>li.active>a{border-left-color:#dd4b39}.skin-red .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-red .sidebar a{color:#b8c7ce}.skin-red .sidebar a:hover{text-decoration:none}.skin-red .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-red .sidebar-menu .treeview-menu>li.active>a,.skin-red .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-red .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-red .sidebar-form input[type="text"],.skin-red .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-red .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red .sidebar-form input[type="text"]:focus,.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0} -------------------------------------------------------------------------------- /src/main/java/com/iszhouhua/service/SkillService.java: -------------------------------------------------------------------------------- 1 | package com.iszhouhua.service; 2 | 3 | import com.iszhouhua.mapper.JobMapper; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.stereotype.Service; 6 | import org.springframework.util.LinkedCaseInsensitiveMap; 7 | import java.util.*; 8 | import java.util.regex.Matcher; 9 | import java.util.regex.Pattern; 10 | import java.util.stream.Collectors; 11 | 12 | /** 13 | * @author ZhouHua 14 | * @date 2018/8/8 15 | */ 16 | @Service 17 | public class SkillService{ 18 | @Autowired 19 | private JobMapper jobMapper; 20 | 21 | public Map skillStatistics(String city, String name) { 22 | List descriptions = jobMapper.selectDescriptionByCityAndJobName(city,name); 23 | String regex = "[a-zA-Z]+"; 24 | Map map=new LinkedCaseInsensitiveMap<>(4096); 25 | for (String description : descriptions) { 26 | List list=getMatchers(regex, description); 27 | for (String str : list) { 28 | if (map.containsKey(str)){ 29 | map.put(str,map.get(str)+1); 30 | }else{ 31 | map.put(str,1); 32 | } 33 | } 34 | } 35 | return sortMapByValue(map,50); 36 | } 37 | 38 | /** 39 | * 获得所有匹配正则表达式的内容 40 | * @param regex 正则表达式 41 | * @param source 需要匹配的字符串 42 | * @return 43 | */ 44 | List getMatchers(String regex, String source){ 45 | Pattern pattern = Pattern.compile(regex); 46 | Matcher matcher = pattern.matcher(source); 47 | List list = new ArrayList<>(); 48 | while (matcher.find()) { 49 | list.add(matcher.group()); 50 | } 51 | return list; 52 | } 53 | 54 | /** 55 | * 对map的value倒序排序并取出前n条 56 | * @param map 待排序对象 57 | * @param size 需要取出的条数 58 | * @return 结果 59 | */ 60 | public Map sortMapByValue(Map map,Integer size) { 61 | Map sortedMap = new LinkedHashMap<>(); 62 | 63 | List> lists= new ArrayList<>(map.entrySet()); 64 | // Collections.sort(lists, (o1, o2) -> { 65 | // int p=o2.getValue()-o1.getValue(); 66 | // return p>0?1:-1; 67 | // }); 68 | 69 | lists=lists.stream().sorted(Comparator.comparing(Map.Entry::getValue).reversed()).collect(Collectors.toList()); 70 | 71 | if(lists.size()>=size){ 72 | //lists.subList()用法 73 | for(Map.Entry set:lists.subList(0, size)){ 74 | sortedMap.put(set.getKey(), set.getValue()); 75 | } 76 | }else { 77 | for(Map.Entry set:lists){ 78 | sortedMap.put(set.getKey(), set.getValue()); 79 | } 80 | } 81 | return sortedMap; 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/skins/skin-green.min.css: -------------------------------------------------------------------------------- 1 | .skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header .logo{background-color:#008d4c;color:#fff;border-bottom:0 solid transparent}.skin-green .main-header .logo:hover{background-color:#008749}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:transparent}.skin-green .wrapper,.skin-green .main-sidebar,.skin-green .left-side{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li:hover>a,.skin-green .sidebar-menu>li.active>a,.skin-green .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-green .sidebar-menu>li.active>a{border-left-color:#00a65a}.skin-green .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-green .sidebar-menu .treeview-menu>li.active>a,.skin-green .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-green .sidebar-form input[type="text"],.skin-green .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-green .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green .sidebar-form input[type="text"]:focus,.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0} -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/skins/skin-purple.min.css: -------------------------------------------------------------------------------- 1 | .skin-purple .main-header .navbar{background-color:#605ca8}.skin-purple .main-header .navbar .nav>li>a{color:#fff}.skin-purple .main-header .navbar .nav>li>a:hover,.skin-purple .main-header .navbar .nav>li>a:active,.skin-purple .main-header .navbar .nav>li>a:focus,.skin-purple .main-header .navbar .nav .open>a,.skin-purple .main-header .navbar .nav .open>a:hover,.skin-purple .main-header .navbar .nav .open>a:focus,.skin-purple .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple .main-header .logo{background-color:#555299;color:#fff;border-bottom:0 solid transparent}.skin-purple .main-header .logo:hover{background-color:#545096}.skin-purple .main-header li.user-header{background-color:#605ca8}.skin-purple .content-header{background:transparent}.skin-purple .wrapper,.skin-purple .main-sidebar,.skin-purple .left-side{background-color:#222d32}.skin-purple .user-panel>.info,.skin-purple .user-panel>.info>a{color:#fff}.skin-purple .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-purple .sidebar-menu>li>a{border-left:3px solid transparent}.skin-purple .sidebar-menu>li:hover>a,.skin-purple .sidebar-menu>li.active>a,.skin-purple .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-purple .sidebar-menu>li.active>a{border-left-color:#605ca8}.skin-purple .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-purple .sidebar a{color:#b8c7ce}.skin-purple .sidebar a:hover{text-decoration:none}.skin-purple .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-purple .sidebar-menu .treeview-menu>li.active>a,.skin-purple .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-purple .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-purple .sidebar-form input[type="text"],.skin-purple .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-purple .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple .sidebar-form input[type="text"]:focus,.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0} -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/skins/skin-yellow.min.css: -------------------------------------------------------------------------------- 1 | .skin-yellow .main-header .navbar{background-color:#f39c12}.skin-yellow .main-header .navbar .nav>li>a{color:#fff}.skin-yellow .main-header .navbar .nav>li>a:hover,.skin-yellow .main-header .navbar .nav>li>a:active,.skin-yellow .main-header .navbar .nav>li>a:focus,.skin-yellow .main-header .navbar .nav .open>a,.skin-yellow .main-header .navbar .nav .open>a:hover,.skin-yellow .main-header .navbar .nav .open>a:focus,.skin-yellow .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow .main-header .logo{background-color:#e08e0b;color:#fff;border-bottom:0 solid transparent}.skin-yellow .main-header .logo:hover{background-color:#db8b0b}.skin-yellow .main-header li.user-header{background-color:#f39c12}.skin-yellow .content-header{background:transparent}.skin-yellow .wrapper,.skin-yellow .main-sidebar,.skin-yellow .left-side{background-color:#222d32}.skin-yellow .user-panel>.info,.skin-yellow .user-panel>.info>a{color:#fff}.skin-yellow .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-yellow .sidebar-menu>li>a{border-left:3px solid transparent}.skin-yellow .sidebar-menu>li:hover>a,.skin-yellow .sidebar-menu>li.active>a,.skin-yellow .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-yellow .sidebar-menu>li.active>a{border-left-color:#f39c12}.skin-yellow .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-yellow .sidebar a{color:#b8c7ce}.skin-yellow .sidebar a:hover{text-decoration:none}.skin-yellow .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-yellow .sidebar-menu .treeview-menu>li.active>a,.skin-yellow .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-yellow .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-yellow .sidebar-form input[type="text"],.skin-yellow .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-yellow .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow .sidebar-form input[type="text"]:focus,.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0} -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/skins/skin-blue.min.css: -------------------------------------------------------------------------------- 1 | .skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header .logo{background-color:#367fa9;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a,.skin-blue .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-blue .sidebar-menu>li.active>a{border-left-color:#3c8dbc}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-blue .sidebar-menu .treeview-menu>li.active>a,.skin-blue .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8} -------------------------------------------------------------------------------- /src/main/resources/mapper/JobMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | INSERT IGNORE INTO `job`(`city`,`job_name`,`url`,`min_salary`,`max_salary`,`education`,`experience`,`address`,`description`,`company_name`,`release_time`,`create_time`) 6 | VALUES 7 | 8 | (#{item.city},#{item.jobName},#{item.url},#{item.minSalary}, 9 | #{item.maxSalary},#{item.education},#{item.experience},#{item.address}, 10 | #{item.description},#{item.companyName},#{item.releaseTime},now()) 11 | 12 | 13 | 14 | 15 | 16 | 17 | city=#{city} 18 | 19 | 20 | AND job_name LIKE #{jobName} 21 | 22 | 23 | 24 | 25 | 26 | UPDATE job 27 | 28 | city=#{city}, 29 | job_name=#{jobName}, 30 | min_salary=#{minSalary}, 31 | max_salary=#{maxSalary}, 32 | education=#{education}, 33 | address=#{address}, 34 | description=#{description}, 35 | company_name=#{companyName}, 36 | create_time=#{createTime}, 37 | release_time=#{releaseTime} 38 | 39 | WHERE 40 | 41 | 42 | id=#{id} 43 | 44 | 45 | url=#{url} 46 | 47 | 48 | id=0 49 | 50 | 51 | 52 | 53 | 54 | SELECT floor(AVG(min_salary)) AS minSalary,floor(AVG(max_salary)) AS maxSalary,experience 55 | FROM `job` 56 | 57 | GROUP BY experience 58 | 59 | 60 | 61 | SELECT ifnull(floor(AVG(min_salary)),0) AS minSalary,ifnull(floor(AVG(max_salary)),0) AS maxSalary,education 62 | FROM `job` 63 | 64 | GROUP BY education 65 | 66 | 67 | 68 | SELECT description FROM `job` where description is not null 69 | 70 | and city=#{city} 71 | 72 | 73 | AND job_name LIKE #{jobName} 74 | 75 | 76 | -------------------------------------------------------------------------------- /src/main/resources/templates/common/right.html: -------------------------------------------------------------------------------- 1 | 2 | 73 | 74 | 76 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/skins/skin-black.min.css: -------------------------------------------------------------------------------- 1 | .skin-black .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black .main-header .navbar-toggle{color:#333}.skin-black .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar{background-color:#fff}.skin-black .main-header .navbar .nav>li>a{color:#333}.skin-black .main-header .navbar .nav>li>a:hover,.skin-black .main-header .navbar .nav>li>a:active,.skin-black .main-header .navbar .nav>li>a:focus,.skin-black .main-header .navbar .nav .open>a,.skin-black .main-header .navbar .nav .open>a:hover,.skin-black .main-header .navbar .nav .open>a:focus,.skin-black .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black .main-header .navbar .sidebar-toggle{color:#333}.skin-black .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black .main-header .navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black .main-header li.user-header{background-color:#222}.skin-black .content-header{background:transparent;box-shadow:none}.skin-black .wrapper,.skin-black .main-sidebar,.skin-black .left-side{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li:hover>a,.skin-black .sidebar-menu>li.active>a,.skin-black .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-black .sidebar-menu>li.active>a{border-left-color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-black .sidebar-menu .treeview-menu>li.active>a,.skin-black .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-black .sidebar-form input[type="text"],.skin-black .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-black .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black .sidebar-form input[type="text"]:focus,.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-black .pace .pace-progress{background:#222}.skin-black .pace .pace-activity{border-top-color:#222;border-left-color:#222} -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/skins/skin-red-light.min.css: -------------------------------------------------------------------------------- 1 | .skin-red-light .main-header .navbar{background-color:#dd4b39}.skin-red-light .main-header .navbar .nav>li>a{color:#fff}.skin-red-light .main-header .navbar .nav>li>a:hover,.skin-red-light .main-header .navbar .nav>li>a:active,.skin-red-light .main-header .navbar .nav>li>a:focus,.skin-red-light .main-header .navbar .nav .open>a,.skin-red-light .main-header .navbar .nav .open>a:hover,.skin-red-light .main-header .navbar .nav .open>a:focus,.skin-red-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red-light .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red-light .main-header .logo{background-color:#dd4b39;color:#fff;border-bottom:0 solid transparent}.skin-red-light .main-header .logo:hover{background-color:#dc4735}.skin-red-light .main-header li.user-header{background-color:#dd4b39}.skin-red-light .content-header{background:transparent}.skin-red-light .wrapper,.skin-red-light .main-sidebar,.skin-red-light .left-side{background-color:#f9fafc}.skin-red-light .main-sidebar{border-right:1px solid #d2d6de}.skin-red-light .user-panel>.info,.skin-red-light .user-panel>.info>a{color:#444}.skin-red-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-red-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-red-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-red-light .sidebar-menu>li:hover>a,.skin-red-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-red-light .sidebar-menu>li.active{border-left-color:#dd4b39}.skin-red-light .sidebar-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-red-light .sidebar a{color:#444}.skin-red-light .sidebar a:hover{text-decoration:none}.skin-red-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-red-light .sidebar-menu .treeview-menu>li.active>a,.skin-red-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-red-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-red-light .sidebar-form input[type="text"],.skin-red-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-red-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red-light .sidebar-form input[type="text"]:focus,.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} -------------------------------------------------------------------------------- /src/main/resources/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 首页 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 首页 18 | 首页 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 招聘信息分布统计 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 64 | 65 | 66 | 67 | 城市统计 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /src/main/resources/static/html/zhaopin_files/native-promise-only-0.8.1.js: -------------------------------------------------------------------------------- 1 | /*! Native Promise Only 2 | v0.8.1 (c) Kyle Simpson 3 | MIT License: http://getify.mit-license.org 4 | */ 5 | !function(t,n,e){n[t]=n[t]||e(),"undefined"!=typeof module&&module.exports?module.exports=n[t]:"function"==typeof define&&define.amd&&define(function(){return n[t]})}("Promise","undefined"!=typeof global?global:this,function(){"use strict";function t(t,n){l.add(t,n),h||(h=y(l.drain))}function n(t){var n,e=typeof t;return null==t||"object"!=e&&"function"!=e||(n=t.then),"function"==typeof n?n:!1}function e(){for(var t=0;t0&&t(e,u))}catch(a){i.call(new f(u),a)}}}function i(n){var o=this;o.triggered||(o.triggered=!0,o.def&&(o=o.def),o.msg=n,o.state=2,o.chain.length>0&&t(e,o))}function c(t,n,e,o){for(var r=0;rli>a{color:#fff}.skin-green-light .main-header .navbar .nav>li>a:hover,.skin-green-light .main-header .navbar .nav>li>a:active,.skin-green-light .main-header .navbar .nav>li>a:focus,.skin-green-light .main-header .navbar .nav .open>a,.skin-green-light .main-header .navbar .nav .open>a:hover,.skin-green-light .main-header .navbar .nav .open>a:focus,.skin-green-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green-light .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green-light .main-header .logo{background-color:#00a65a;color:#fff;border-bottom:0 solid transparent}.skin-green-light .main-header .logo:hover{background-color:#00a157}.skin-green-light .main-header li.user-header{background-color:#00a65a}.skin-green-light .content-header{background:transparent}.skin-green-light .wrapper,.skin-green-light .main-sidebar,.skin-green-light .left-side{background-color:#f9fafc}.skin-green-light .main-sidebar{border-right:1px solid #d2d6de}.skin-green-light .user-panel>.info,.skin-green-light .user-panel>.info>a{color:#444}.skin-green-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-green-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-green-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-green-light .sidebar-menu>li:hover>a,.skin-green-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-green-light .sidebar-menu>li.active{border-left-color:#00a65a}.skin-green-light .sidebar-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-green-light .sidebar a{color:#444}.skin-green-light .sidebar a:hover{text-decoration:none}.skin-green-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-green-light .sidebar-menu .treeview-menu>li.active>a,.skin-green-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-green-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-green-light .sidebar-form input[type="text"],.skin-green-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-green-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green-light .sidebar-form input[type="text"]:focus,.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/skins/skin-purple-light.min.css: -------------------------------------------------------------------------------- 1 | .skin-purple-light .main-header .navbar{background-color:#605ca8}.skin-purple-light .main-header .navbar .nav>li>a{color:#fff}.skin-purple-light .main-header .navbar .nav>li>a:hover,.skin-purple-light .main-header .navbar .nav>li>a:active,.skin-purple-light .main-header .navbar .nav>li>a:focus,.skin-purple-light .main-header .navbar .nav .open>a,.skin-purple-light .main-header .navbar .nav .open>a:hover,.skin-purple-light .main-header .navbar .nav .open>a:focus,.skin-purple-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple-light .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple-light .main-header .logo{background-color:#605ca8;color:#fff;border-bottom:0 solid transparent}.skin-purple-light .main-header .logo:hover{background-color:#5d59a6}.skin-purple-light .main-header li.user-header{background-color:#605ca8}.skin-purple-light .content-header{background:transparent}.skin-purple-light .wrapper,.skin-purple-light .main-sidebar,.skin-purple-light .left-side{background-color:#f9fafc}.skin-purple-light .main-sidebar{border-right:1px solid #d2d6de}.skin-purple-light .user-panel>.info,.skin-purple-light .user-panel>.info>a{color:#444}.skin-purple-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-purple-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-purple-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-purple-light .sidebar-menu>li:hover>a,.skin-purple-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-purple-light .sidebar-menu>li.active{border-left-color:#605ca8}.skin-purple-light .sidebar-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-purple-light .sidebar a{color:#444}.skin-purple-light .sidebar a:hover{text-decoration:none}.skin-purple-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a,.skin-purple-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-purple-light .sidebar-form input[type="text"],.skin-purple-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-purple-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple-light .sidebar-form input[type="text"]:focus,.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/skins/skin-yellow-light.min.css: -------------------------------------------------------------------------------- 1 | .skin-yellow-light .main-header .navbar{background-color:#f39c12}.skin-yellow-light .main-header .navbar .nav>li>a{color:#fff}.skin-yellow-light .main-header .navbar .nav>li>a:hover,.skin-yellow-light .main-header .navbar .nav>li>a:active,.skin-yellow-light .main-header .navbar .nav>li>a:focus,.skin-yellow-light .main-header .navbar .nav .open>a,.skin-yellow-light .main-header .navbar .nav .open>a:hover,.skin-yellow-light .main-header .navbar .nav .open>a:focus,.skin-yellow-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow-light .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow-light .main-header .logo{background-color:#f39c12;color:#fff;border-bottom:0 solid transparent}.skin-yellow-light .main-header .logo:hover{background-color:#f39a0d}.skin-yellow-light .main-header li.user-header{background-color:#f39c12}.skin-yellow-light .content-header{background:transparent}.skin-yellow-light .wrapper,.skin-yellow-light .main-sidebar,.skin-yellow-light .left-side{background-color:#f9fafc}.skin-yellow-light .main-sidebar{border-right:1px solid #d2d6de}.skin-yellow-light .user-panel>.info,.skin-yellow-light .user-panel>.info>a{color:#444}.skin-yellow-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-yellow-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-yellow-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-yellow-light .sidebar-menu>li:hover>a,.skin-yellow-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-yellow-light .sidebar-menu>li.active{border-left-color:#f39c12}.skin-yellow-light .sidebar-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-yellow-light .sidebar a{color:#444}.skin-yellow-light .sidebar a:hover{text-decoration:none}.skin-yellow-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a,.skin-yellow-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-yellow-light .sidebar-form input[type="text"],.skin-yellow-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-yellow-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow-light .sidebar-form input[type="text"]:focus,.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/skins/skin-blue-light.min.css: -------------------------------------------------------------------------------- 1 | .skin-blue-light .main-header .navbar{background-color:#3c8dbc}.skin-blue-light .main-header .navbar .nav>li>a{color:#fff}.skin-blue-light .main-header .navbar .nav>li>a:hover,.skin-blue-light .main-header .navbar .nav>li>a:active,.skin-blue-light .main-header .navbar .nav>li>a:focus,.skin-blue-light .main-header .navbar .nav .open>a,.skin-blue-light .main-header .navbar .nav .open>a:hover,.skin-blue-light .main-header .navbar .nav .open>a:focus,.skin-blue-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue-light .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue-light .main-header .logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue-light .main-header .logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header li.user-header{background-color:#3c8dbc}.skin-blue-light .content-header{background:transparent}.skin-blue-light .wrapper,.skin-blue-light .main-sidebar,.skin-blue-light .left-side{background-color:#f9fafc}.skin-blue-light .main-sidebar{border-right:1px solid #d2d6de}.skin-blue-light .user-panel>.info,.skin-blue-light .user-panel>.info>a{color:#444}.skin-blue-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-blue-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-blue-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-blue-light .sidebar-menu>li:hover>a,.skin-blue-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-blue-light .sidebar-menu>li.active{border-left-color:#3c8dbc}.skin-blue-light .sidebar-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-blue-light .sidebar a{color:#444}.skin-blue-light .sidebar a:hover{text-decoration:none}.skin-blue-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a,.skin-blue-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-blue-light .sidebar-form input[type="text"],.skin-blue-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-blue-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue-light .sidebar-form input[type="text"]:focus,.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-blue-light .main-footer{border-top-color:#d2d6de}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8} -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/skins/skin-black-light.min.css: -------------------------------------------------------------------------------- 1 | .skin-black-light .main-header{border-bottom:1px solid #d2d6de}.skin-black-light .main-header .navbar-toggle{color:#333}.skin-black-light .main-header .navbar-brand{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar{background-color:#fff}.skin-black-light .main-header .navbar .nav>li>a{color:#333}.skin-black-light .main-header .navbar .nav>li>a:hover,.skin-black-light .main-header .navbar .nav>li>a:active,.skin-black-light .main-header .navbar .nav>li>a:focus,.skin-black-light .main-header .navbar .nav .open>a,.skin-black-light .main-header .navbar .nav .open>a:hover,.skin-black-light .main-header .navbar .nav .open>a:focus,.skin-black-light .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black-light .main-header .navbar .sidebar-toggle{color:#333}.skin-black-light .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black-light .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-nav>li>a{border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black-light .main-header .navbar .navbar-right>li>a{border-left:1px solid #d2d6de;border-right-width:0}.skin-black-light .main-header>.logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #d2d6de}.skin-black-light .main-header>.logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black-light .main-header>.logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black-light .main-header>.logo:hover{background-color:#1f1f1f}}.skin-black-light .main-header li.user-header{background-color:#222}.skin-black-light .content-header{background:transparent;box-shadow:none}.skin-black-light .wrapper,.skin-black-light .main-sidebar,.skin-black-light .left-side{background-color:#f9fafc}.skin-black-light .main-sidebar{border-right:1px solid #d2d6de}.skin-black-light .user-panel>.info,.skin-black-light .user-panel>.info>a{color:#444}.skin-black-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-black-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-black-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-black-light .sidebar-menu>li:hover>a,.skin-black-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-black-light .sidebar-menu>li.active{border-left-color:#fff}.skin-black-light .sidebar-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-black-light .sidebar a{color:#444}.skin-black-light .sidebar a:hover{text-decoration:none}.skin-black-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-black-light .sidebar-menu .treeview-menu>li.active>a,.skin-black-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-black-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-black-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black-light .sidebar-form input[type="text"]:focus,.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4.0.0 4 | com.iszhouhua 5 | zhaopin 6 | 1.0.0 7 | jar 8 | 9 | 10 | org.springframework.boot 11 | spring-boot-starter-parent 12 | 2.0.0.RELEASE 13 | 14 | 15 | 16 | UTF-8 17 | UTF-8 18 | 1.8 19 | true 20 | 21 | 22 | 23 | 24 | 25 | org.springframework.boot 26 | spring-boot-starter-web 27 | 28 | 29 | 30 | org.springframework.boot 31 | spring-boot-starter-thymeleaf 32 | 33 | 34 | 35 | nz.net.ultraq.thymeleaf 36 | thymeleaf-layout-dialect 37 | 38 | 39 | 40 | org.springframework.boot 41 | spring-boot-starter-test 42 | 43 | 44 | 45 | org.springframework.boot 46 | spring-boot-starter-data-redis 47 | 48 | 49 | org.apache.commons 50 | commons-pool2 51 | 52 | 53 | 54 | org.mybatis.spring.boot 55 | mybatis-spring-boot-starter 56 | 1.3.2 57 | 58 | 59 | 60 | mysql 61 | mysql-connector-java 62 | 63 | 64 | 65 | org.apache.commons 66 | commons-lang3 67 | 3.5 68 | 69 | 70 | 71 | com.alibaba 72 | fastjson 73 | 1.2.47 74 | 75 | 76 | 77 | org.projectlombok 78 | lombok 79 | 1.18.0 80 | provided 81 | 82 | 83 | 84 | org.jsoup 85 | jsoup 86 | 1.11.3 87 | 88 | 89 | 90 | org.apache.httpcomponents 91 | httpclient 92 | 93 | 94 | 95 | org.springframework.boot 96 | spring-boot-devtools 97 | true 98 | 99 | 100 | 101 | org.springframework.boot 102 | spring-boot-starter-quartz 103 | 104 | 105 | 106 | 107 | 108 | org.springframework.boot 109 | spring-boot-maven-plugin 110 | 111 | true 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/skins/skin-red.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Red 3 | * --------- 4 | */ 5 | .skin-red .main-header .navbar { 6 | background-color: #dd4b39; 7 | } 8 | .skin-red .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-red .main-header .navbar .nav > li > a:hover, 12 | .skin-red .main-header .navbar .nav > li > a:active, 13 | .skin-red .main-header .navbar .nav > li > a:focus, 14 | .skin-red .main-header .navbar .nav .open > a, 15 | .skin-red .main-header .navbar .nav .open > a:hover, 16 | .skin-red .main-header .navbar .nav .open > a:focus, 17 | .skin-red .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-red .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-red .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-red .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-red .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #d73925; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-red .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-red .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-red .main-header .navbar .dropdown-menu li a:hover { 42 | background: #d73925; 43 | } 44 | } 45 | .skin-red .main-header .logo { 46 | background-color: #d73925; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-red .main-header .logo:hover { 51 | background-color: #d33724; 52 | } 53 | .skin-red .main-header li.user-header { 54 | background-color: #dd4b39; 55 | } 56 | .skin-red .content-header { 57 | background: transparent; 58 | } 59 | .skin-red .wrapper, 60 | .skin-red .main-sidebar, 61 | .skin-red .left-side { 62 | background-color: #222d32; 63 | } 64 | .skin-red .user-panel > .info, 65 | .skin-red .user-panel > .info > a { 66 | color: #fff; 67 | } 68 | .skin-red .sidebar-menu > li.header { 69 | color: #4b646f; 70 | background: #1a2226; 71 | } 72 | .skin-red .sidebar-menu > li > a { 73 | border-left: 3px solid transparent; 74 | } 75 | .skin-red .sidebar-menu > li:hover > a, 76 | .skin-red .sidebar-menu > li.active > a, 77 | .skin-red .sidebar-menu > li.menu-open > a { 78 | color: #ffffff; 79 | background: #1e282c; 80 | } 81 | .skin-red .sidebar-menu > li.active > a { 82 | border-left-color: #dd4b39; 83 | } 84 | .skin-red .sidebar-menu > li > .treeview-menu { 85 | margin: 0 1px; 86 | background: #2c3b41; 87 | } 88 | .skin-red .sidebar a { 89 | color: #b8c7ce; 90 | } 91 | .skin-red .sidebar a:hover { 92 | text-decoration: none; 93 | } 94 | .skin-red .sidebar-menu .treeview-menu > li > a { 95 | color: #8aa4af; 96 | } 97 | .skin-red .sidebar-menu .treeview-menu > li.active > a, 98 | .skin-red .sidebar-menu .treeview-menu > li > a:hover { 99 | color: #ffffff; 100 | } 101 | .skin-red .sidebar-form { 102 | border-radius: 3px; 103 | border: 1px solid #374850; 104 | margin: 10px 10px; 105 | } 106 | .skin-red .sidebar-form input[type="text"], 107 | .skin-red .sidebar-form .btn { 108 | box-shadow: none; 109 | background-color: #374850; 110 | border: 1px solid transparent; 111 | height: 35px; 112 | } 113 | .skin-red .sidebar-form input[type="text"] { 114 | color: #666; 115 | border-top-left-radius: 2px; 116 | border-top-right-radius: 0; 117 | border-bottom-right-radius: 0; 118 | border-bottom-left-radius: 2px; 119 | } 120 | .skin-red .sidebar-form input[type="text"]:focus, 121 | .skin-red .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 122 | background-color: #fff; 123 | color: #666; 124 | } 125 | .skin-red .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 126 | border-left-color: #fff; 127 | } 128 | .skin-red .sidebar-form .btn { 129 | color: #999; 130 | border-top-left-radius: 0; 131 | border-top-right-radius: 2px; 132 | border-bottom-right-radius: 2px; 133 | border-bottom-left-radius: 0; 134 | } 135 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/skins/skin-green.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Green 3 | * ----------- 4 | */ 5 | .skin-green .main-header .navbar { 6 | background-color: #00a65a; 7 | } 8 | .skin-green .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-green .main-header .navbar .nav > li > a:hover, 12 | .skin-green .main-header .navbar .nav > li > a:active, 13 | .skin-green .main-header .navbar .nav > li > a:focus, 14 | .skin-green .main-header .navbar .nav .open > a, 15 | .skin-green .main-header .navbar .nav .open > a:hover, 16 | .skin-green .main-header .navbar .nav .open > a:focus, 17 | .skin-green .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-green .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-green .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-green .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-green .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #008d4c; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-green .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-green .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-green .main-header .navbar .dropdown-menu li a:hover { 42 | background: #008d4c; 43 | } 44 | } 45 | .skin-green .main-header .logo { 46 | background-color: #008d4c; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-green .main-header .logo:hover { 51 | background-color: #008749; 52 | } 53 | .skin-green .main-header li.user-header { 54 | background-color: #00a65a; 55 | } 56 | .skin-green .content-header { 57 | background: transparent; 58 | } 59 | .skin-green .wrapper, 60 | .skin-green .main-sidebar, 61 | .skin-green .left-side { 62 | background-color: #222d32; 63 | } 64 | .skin-green .user-panel > .info, 65 | .skin-green .user-panel > .info > a { 66 | color: #fff; 67 | } 68 | .skin-green .sidebar-menu > li.header { 69 | color: #4b646f; 70 | background: #1a2226; 71 | } 72 | .skin-green .sidebar-menu > li > a { 73 | border-left: 3px solid transparent; 74 | } 75 | .skin-green .sidebar-menu > li:hover > a, 76 | .skin-green .sidebar-menu > li.active > a, 77 | .skin-green .sidebar-menu > li.menu-open > a { 78 | color: #ffffff; 79 | background: #1e282c; 80 | } 81 | .skin-green .sidebar-menu > li.active > a { 82 | border-left-color: #00a65a; 83 | } 84 | .skin-green .sidebar-menu > li > .treeview-menu { 85 | margin: 0 1px; 86 | background: #2c3b41; 87 | } 88 | .skin-green .sidebar a { 89 | color: #b8c7ce; 90 | } 91 | .skin-green .sidebar a:hover { 92 | text-decoration: none; 93 | } 94 | .skin-green .sidebar-menu .treeview-menu > li > a { 95 | color: #8aa4af; 96 | } 97 | .skin-green .sidebar-menu .treeview-menu > li.active > a, 98 | .skin-green .sidebar-menu .treeview-menu > li > a:hover { 99 | color: #ffffff; 100 | } 101 | .skin-green .sidebar-form { 102 | border-radius: 3px; 103 | border: 1px solid #374850; 104 | margin: 10px 10px; 105 | } 106 | .skin-green .sidebar-form input[type="text"], 107 | .skin-green .sidebar-form .btn { 108 | box-shadow: none; 109 | background-color: #374850; 110 | border: 1px solid transparent; 111 | height: 35px; 112 | } 113 | .skin-green .sidebar-form input[type="text"] { 114 | color: #666; 115 | border-top-left-radius: 2px; 116 | border-top-right-radius: 0; 117 | border-bottom-right-radius: 0; 118 | border-bottom-left-radius: 2px; 119 | } 120 | .skin-green .sidebar-form input[type="text"]:focus, 121 | .skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 122 | background-color: #fff; 123 | color: #666; 124 | } 125 | .skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 126 | border-left-color: #fff; 127 | } 128 | .skin-green .sidebar-form .btn { 129 | color: #999; 130 | border-top-left-radius: 0; 131 | border-top-right-radius: 2px; 132 | border-bottom-right-radius: 2px; 133 | border-bottom-left-radius: 0; 134 | } 135 | -------------------------------------------------------------------------------- /src/main/resources/templates/job.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 工作统计 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 工作统计 20 | 统计工作相关信息 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 筛选 30 | 31 | 32 | 33 | 34 | 35 | 城市: 36 | 37 | 全国 38 | 39 | 40 | 41 | 42 | 职位关键字: 43 | 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 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 学历与薪资的关系 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/skins/skin-purple.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Purple 3 | * ------------ 4 | */ 5 | .skin-purple .main-header .navbar { 6 | background-color: #605ca8; 7 | } 8 | .skin-purple .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-purple .main-header .navbar .nav > li > a:hover, 12 | .skin-purple .main-header .navbar .nav > li > a:active, 13 | .skin-purple .main-header .navbar .nav > li > a:focus, 14 | .skin-purple .main-header .navbar .nav .open > a, 15 | .skin-purple .main-header .navbar .nav .open > a:hover, 16 | .skin-purple .main-header .navbar .nav .open > a:focus, 17 | .skin-purple .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-purple .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-purple .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-purple .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-purple .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #555299; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-purple .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-purple .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-purple .main-header .navbar .dropdown-menu li a:hover { 42 | background: #555299; 43 | } 44 | } 45 | .skin-purple .main-header .logo { 46 | background-color: #555299; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-purple .main-header .logo:hover { 51 | background-color: #545096; 52 | } 53 | .skin-purple .main-header li.user-header { 54 | background-color: #605ca8; 55 | } 56 | .skin-purple .content-header { 57 | background: transparent; 58 | } 59 | .skin-purple .wrapper, 60 | .skin-purple .main-sidebar, 61 | .skin-purple .left-side { 62 | background-color: #222d32; 63 | } 64 | .skin-purple .user-panel > .info, 65 | .skin-purple .user-panel > .info > a { 66 | color: #fff; 67 | } 68 | .skin-purple .sidebar-menu > li.header { 69 | color: #4b646f; 70 | background: #1a2226; 71 | } 72 | .skin-purple .sidebar-menu > li > a { 73 | border-left: 3px solid transparent; 74 | } 75 | .skin-purple .sidebar-menu > li:hover > a, 76 | .skin-purple .sidebar-menu > li.active > a, 77 | .skin-purple .sidebar-menu > li.menu-open > a { 78 | color: #ffffff; 79 | background: #1e282c; 80 | } 81 | .skin-purple .sidebar-menu > li.active > a { 82 | border-left-color: #605ca8; 83 | } 84 | .skin-purple .sidebar-menu > li > .treeview-menu { 85 | margin: 0 1px; 86 | background: #2c3b41; 87 | } 88 | .skin-purple .sidebar a { 89 | color: #b8c7ce; 90 | } 91 | .skin-purple .sidebar a:hover { 92 | text-decoration: none; 93 | } 94 | .skin-purple .sidebar-menu .treeview-menu > li > a { 95 | color: #8aa4af; 96 | } 97 | .skin-purple .sidebar-menu .treeview-menu > li.active > a, 98 | .skin-purple .sidebar-menu .treeview-menu > li > a:hover { 99 | color: #ffffff; 100 | } 101 | .skin-purple .sidebar-form { 102 | border-radius: 3px; 103 | border: 1px solid #374850; 104 | margin: 10px 10px; 105 | } 106 | .skin-purple .sidebar-form input[type="text"], 107 | .skin-purple .sidebar-form .btn { 108 | box-shadow: none; 109 | background-color: #374850; 110 | border: 1px solid transparent; 111 | height: 35px; 112 | } 113 | .skin-purple .sidebar-form input[type="text"] { 114 | color: #666; 115 | border-top-left-radius: 2px; 116 | border-top-right-radius: 0; 117 | border-bottom-right-radius: 0; 118 | border-bottom-left-radius: 2px; 119 | } 120 | .skin-purple .sidebar-form input[type="text"]:focus, 121 | .skin-purple .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 122 | background-color: #fff; 123 | color: #666; 124 | } 125 | .skin-purple .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 126 | border-left-color: #fff; 127 | } 128 | .skin-purple .sidebar-form .btn { 129 | color: #999; 130 | border-top-left-radius: 0; 131 | border-top-right-radius: 2px; 132 | border-bottom-right-radius: 2px; 133 | border-bottom-left-radius: 0; 134 | } 135 | -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/skins/skin-yellow.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Yellow 3 | * ------------ 4 | */ 5 | .skin-yellow .main-header .navbar { 6 | background-color: #f39c12; 7 | } 8 | .skin-yellow .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-yellow .main-header .navbar .nav > li > a:hover, 12 | .skin-yellow .main-header .navbar .nav > li > a:active, 13 | .skin-yellow .main-header .navbar .nav > li > a:focus, 14 | .skin-yellow .main-header .navbar .nav .open > a, 15 | .skin-yellow .main-header .navbar .nav .open > a:hover, 16 | .skin-yellow .main-header .navbar .nav .open > a:focus, 17 | .skin-yellow .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-yellow .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-yellow .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-yellow .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-yellow .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #e08e0b; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-yellow .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-yellow .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-yellow .main-header .navbar .dropdown-menu li a:hover { 42 | background: #e08e0b; 43 | } 44 | } 45 | .skin-yellow .main-header .logo { 46 | background-color: #e08e0b; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-yellow .main-header .logo:hover { 51 | background-color: #db8b0b; 52 | } 53 | .skin-yellow .main-header li.user-header { 54 | background-color: #f39c12; 55 | } 56 | .skin-yellow .content-header { 57 | background: transparent; 58 | } 59 | .skin-yellow .wrapper, 60 | .skin-yellow .main-sidebar, 61 | .skin-yellow .left-side { 62 | background-color: #222d32; 63 | } 64 | .skin-yellow .user-panel > .info, 65 | .skin-yellow .user-panel > .info > a { 66 | color: #fff; 67 | } 68 | .skin-yellow .sidebar-menu > li.header { 69 | color: #4b646f; 70 | background: #1a2226; 71 | } 72 | .skin-yellow .sidebar-menu > li > a { 73 | border-left: 3px solid transparent; 74 | } 75 | .skin-yellow .sidebar-menu > li:hover > a, 76 | .skin-yellow .sidebar-menu > li.active > a, 77 | .skin-yellow .sidebar-menu > li.menu-open > a { 78 | color: #ffffff; 79 | background: #1e282c; 80 | } 81 | .skin-yellow .sidebar-menu > li.active > a { 82 | border-left-color: #f39c12; 83 | } 84 | .skin-yellow .sidebar-menu > li > .treeview-menu { 85 | margin: 0 1px; 86 | background: #2c3b41; 87 | } 88 | .skin-yellow .sidebar a { 89 | color: #b8c7ce; 90 | } 91 | .skin-yellow .sidebar a:hover { 92 | text-decoration: none; 93 | } 94 | .skin-yellow .sidebar-menu .treeview-menu > li > a { 95 | color: #8aa4af; 96 | } 97 | .skin-yellow .sidebar-menu .treeview-menu > li.active > a, 98 | .skin-yellow .sidebar-menu .treeview-menu > li > a:hover { 99 | color: #ffffff; 100 | } 101 | .skin-yellow .sidebar-form { 102 | border-radius: 3px; 103 | border: 1px solid #374850; 104 | margin: 10px 10px; 105 | } 106 | .skin-yellow .sidebar-form input[type="text"], 107 | .skin-yellow .sidebar-form .btn { 108 | box-shadow: none; 109 | background-color: #374850; 110 | border: 1px solid transparent; 111 | height: 35px; 112 | } 113 | .skin-yellow .sidebar-form input[type="text"] { 114 | color: #666; 115 | border-top-left-radius: 2px; 116 | border-top-right-radius: 0; 117 | border-bottom-right-radius: 0; 118 | border-bottom-left-radius: 2px; 119 | } 120 | .skin-yellow .sidebar-form input[type="text"]:focus, 121 | .skin-yellow .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 122 | background-color: #fff; 123 | color: #666; 124 | } 125 | .skin-yellow .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 126 | border-left-color: #fff; 127 | } 128 | .skin-yellow .sidebar-form .btn { 129 | color: #999; 130 | border-top-left-radius: 0; 131 | border-top-right-radius: 2px; 132 | border-bottom-right-radius: 2px; 133 | border-bottom-left-radius: 0; 134 | } 135 | -------------------------------------------------------------------------------- /src/main/java/com/iszhouhua/controller/DataController.java: -------------------------------------------------------------------------------- 1 | package com.iszhouhua.controller; 2 | 3 | import com.iszhouhua.mapper.JobMapper; 4 | import com.iszhouhua.model.Job; 5 | import com.iszhouhua.service.SkillService; 6 | import com.iszhouhua.spider.ZhaopinSpider; 7 | import lombok.extern.slf4j.Slf4j; 8 | import org.apache.commons.lang3.StringUtils; 9 | import org.springframework.beans.factory.annotation.Autowired; 10 | import org.springframework.web.bind.annotation.GetMapping; 11 | import org.springframework.web.bind.annotation.PostMapping; 12 | import org.springframework.web.bind.annotation.RequestMapping; 13 | import org.springframework.web.bind.annotation.RestController; 14 | 15 | import java.util.ArrayList; 16 | import java.util.HashMap; 17 | import java.util.List; 18 | import java.util.Map; 19 | 20 | /** 21 | * @author ZhouHua 22 | * @date 2018/7/30 23 | */ 24 | @RestController 25 | @Slf4j 26 | public class DataController { 27 | @Autowired 28 | private JobMapper jobMapper; 29 | 30 | @Autowired 31 | private SkillService skillService; 32 | 33 | @Autowired 34 | private ZhaopinSpider zhaopinSpider; 35 | 36 | /** 37 | * 爬取数据 38 | * @param url 拼接好的参数 39 | * @return 40 | */ 41 | @RequestMapping("updateData") 42 | public String updateData(String url) { 43 | return zhaopinSpider.start(url); 44 | } 45 | 46 | /** 47 | * 各城市招聘信息数量统计 48 | * @return 49 | */ 50 | @GetMapping("cityStatistics") 51 | public List cityStatistics() { 52 | return jobMapper.selectCityJobNumber(); 53 | } 54 | 55 | /** 56 | * 工作经验与工资的关系 57 | * @param city 城市名 58 | * @param name 工作关键字 59 | * @return 60 | */ 61 | @PostMapping("jobExpAndSalary") 62 | public Map jobExpAndSalary(String city, String name) { 63 | name=StringUtils.isBlank(name)?null:"%"+name+"%"; 64 | List jobs=jobMapper.countJobForExpAndSalary(city,name); 65 | List experience=new ArrayList<>(); 66 | List minPrice=new ArrayList<>(),maxPrice=new ArrayList<>(),avgPrice=new ArrayList<>(); 67 | for (Job job:jobs){ 68 | experience.add(job.getExperience()); 69 | minPrice.add(job.getMinSalary()); 70 | maxPrice.add(job.getMaxSalary()); 71 | Integer avg=(job.getMaxSalary()+job.getMinSalary())/2; 72 | avgPrice.add(avg); 73 | } 74 | Map map=new HashMap<>(8); 75 | map.put("experience",experience); 76 | map.put("minPrice",minPrice); 77 | map.put("maxPrice",maxPrice); 78 | map.put("avgPrice",avgPrice); 79 | return map; 80 | } 81 | 82 | /** 83 | * 学历与工资的关系 84 | * @param city 城市 85 | * @param name 工作关键字 86 | * @return 87 | */ 88 | @PostMapping("jobEducationAndSalary") 89 | public Map jobEducationAndSalary(String city, String name) { 90 | name=StringUtils.isBlank(name)?null:"%"+name+"%"; 91 | List jobs=jobMapper.countJobForEducationAndSalary(city,name); 92 | List education=new ArrayList<>(); 93 | List minPrice=new ArrayList<>(),maxPrice=new ArrayList<>(),avgPrice=new ArrayList<>(); 94 | for (Job job:jobs){ 95 | education.add(job.getEducation()); 96 | minPrice.add(job.getMinSalary()); 97 | maxPrice.add(job.getMaxSalary()); 98 | Integer avg=(job.getMaxSalary()+job.getMinSalary())/2; 99 | avgPrice.add(avg); 100 | } 101 | Map map=new HashMap<>(8); 102 | map.put("education",education); 103 | map.put("minPrice",minPrice); 104 | map.put("maxPrice",maxPrice); 105 | map.put("avgPrice",avgPrice); 106 | return map; 107 | } 108 | 109 | /** 110 | * 职位技术要求统计 111 | * @param city 城市 112 | * @param name 工作关键字 113 | * @return 114 | */ 115 | @PostMapping("skillStatistics") 116 | public Map skillStatistics(String city, String name) { 117 | Map result=new HashMap(2); 118 | Map map=skillService.skillStatistics(city,name); 119 | result.put("skill",map.keySet()); 120 | result.put("total",map.values()); 121 | return result; 122 | } 123 | } -------------------------------------------------------------------------------- /src/main/resources/static/plugins/admin-lte/css/skins/skin-blue.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Skin: Blue 3 | * ---------- 4 | */ 5 | .skin-blue .main-header .navbar { 6 | background-color: #3c8dbc; 7 | } 8 | .skin-blue .main-header .navbar .nav > li > a { 9 | color: #ffffff; 10 | } 11 | .skin-blue .main-header .navbar .nav > li > a:hover, 12 | .skin-blue .main-header .navbar .nav > li > a:active, 13 | .skin-blue .main-header .navbar .nav > li > a:focus, 14 | .skin-blue .main-header .navbar .nav .open > a, 15 | .skin-blue .main-header .navbar .nav .open > a:hover, 16 | .skin-blue .main-header .navbar .nav .open > a:focus, 17 | .skin-blue .main-header .navbar .nav > .active > a { 18 | background: rgba(0, 0, 0, 0.1); 19 | color: #f6f6f6; 20 | } 21 | .skin-blue .main-header .navbar .sidebar-toggle { 22 | color: #ffffff; 23 | } 24 | .skin-blue .main-header .navbar .sidebar-toggle:hover { 25 | color: #f6f6f6; 26 | background: rgba(0, 0, 0, 0.1); 27 | } 28 | .skin-blue .main-header .navbar .sidebar-toggle { 29 | color: #fff; 30 | } 31 | .skin-blue .main-header .navbar .sidebar-toggle:hover { 32 | background-color: #367fa9; 33 | } 34 | @media (max-width: 767px) { 35 | .skin-blue .main-header .navbar .dropdown-menu li.divider { 36 | background-color: rgba(255, 255, 255, 0.1); 37 | } 38 | .skin-blue .main-header .navbar .dropdown-menu li a { 39 | color: #fff; 40 | } 41 | .skin-blue .main-header .navbar .dropdown-menu li a:hover { 42 | background: #367fa9; 43 | } 44 | } 45 | .skin-blue .main-header .logo { 46 | background-color: #367fa9; 47 | color: #ffffff; 48 | border-bottom: 0 solid transparent; 49 | } 50 | .skin-blue .main-header .logo:hover { 51 | background-color: #357ca5; 52 | } 53 | .skin-blue .main-header li.user-header { 54 | background-color: #3c8dbc; 55 | } 56 | .skin-blue .content-header { 57 | background: transparent; 58 | } 59 | .skin-blue .wrapper, 60 | .skin-blue .main-sidebar, 61 | .skin-blue .left-side { 62 | background-color: #222d32; 63 | } 64 | .skin-blue .user-panel > .info, 65 | .skin-blue .user-panel > .info > a { 66 | color: #fff; 67 | } 68 | .skin-blue .sidebar-menu > li.header { 69 | color: #4b646f; 70 | background: #1a2226; 71 | } 72 | .skin-blue .sidebar-menu > li > a { 73 | border-left: 3px solid transparent; 74 | } 75 | .skin-blue .sidebar-menu > li:hover > a, 76 | .skin-blue .sidebar-menu > li.active > a, 77 | .skin-blue .sidebar-menu > li.menu-open > a { 78 | color: #ffffff; 79 | background: #1e282c; 80 | } 81 | .skin-blue .sidebar-menu > li.active > a { 82 | border-left-color: #3c8dbc; 83 | } 84 | .skin-blue .sidebar-menu > li > .treeview-menu { 85 | margin: 0 1px; 86 | background: #2c3b41; 87 | } 88 | .skin-blue .sidebar a { 89 | color: #b8c7ce; 90 | } 91 | .skin-blue .sidebar a:hover { 92 | text-decoration: none; 93 | } 94 | .skin-blue .sidebar-menu .treeview-menu > li > a { 95 | color: #8aa4af; 96 | } 97 | .skin-blue .sidebar-menu .treeview-menu > li.active > a, 98 | .skin-blue .sidebar-menu .treeview-menu > li > a:hover { 99 | color: #ffffff; 100 | } 101 | .skin-blue .sidebar-form { 102 | border-radius: 3px; 103 | border: 1px solid #374850; 104 | margin: 10px 10px; 105 | } 106 | .skin-blue .sidebar-form input[type="text"], 107 | .skin-blue .sidebar-form .btn { 108 | box-shadow: none; 109 | background-color: #374850; 110 | border: 1px solid transparent; 111 | height: 35px; 112 | } 113 | .skin-blue .sidebar-form input[type="text"] { 114 | color: #666; 115 | border-top-left-radius: 2px; 116 | border-top-right-radius: 0; 117 | border-bottom-right-radius: 0; 118 | border-bottom-left-radius: 2px; 119 | } 120 | .skin-blue .sidebar-form input[type="text"]:focus, 121 | .skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 122 | background-color: #fff; 123 | color: #666; 124 | } 125 | .skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn { 126 | border-left-color: #fff; 127 | } 128 | .skin-blue .sidebar-form .btn { 129 | color: #999; 130 | border-top-left-radius: 0; 131 | border-top-right-radius: 2px; 132 | border-bottom-right-radius: 2px; 133 | border-bottom-left-radius: 0; 134 | } 135 | .skin-blue.layout-top-nav .main-header > .logo { 136 | background-color: #3c8dbc; 137 | color: #ffffff; 138 | border-bottom: 0 solid transparent; 139 | } 140 | .skin-blue.layout-top-nav .main-header > .logo:hover { 141 | background-color: #3b8ab8; 142 | } 143 | -------------------------------------------------------------------------------- /src/main/java/com/iszhouhua/config/RedisConfig.java: -------------------------------------------------------------------------------- 1 | package com.iszhouhua.config; 2 | 3 | import com.fasterxml.jackson.annotation.JsonAutoDetect; 4 | import com.fasterxml.jackson.annotation.PropertyAccessor; 5 | import com.fasterxml.jackson.databind.ObjectMapper; 6 | import org.springframework.cache.CacheManager; 7 | import org.springframework.cache.annotation.CachingConfigurerSupport; 8 | import org.springframework.cache.annotation.EnableCaching; 9 | import org.springframework.cache.interceptor.KeyGenerator; 10 | import org.springframework.context.annotation.Bean; 11 | import org.springframework.context.annotation.Configuration; 12 | import org.springframework.data.redis.cache.RedisCacheManager; 13 | import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; 14 | import org.springframework.data.redis.core.*; 15 | import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; 16 | import org.springframework.data.redis.serializer.RedisSerializer; 17 | import org.springframework.data.redis.serializer.StringRedisSerializer; 18 | 19 | import javax.annotation.Resource; 20 | import java.util.HashSet; 21 | import java.util.Set; 22 | 23 | /** 24 | * @author ZhouHua 25 | * @date 2018/7/28 26 | */ 27 | @Configuration 28 | @EnableCaching 29 | public class RedisConfig extends CachingConfigurerSupport { 30 | 31 | @Resource 32 | private LettuceConnectionFactory lettuceConnectionFactory; 33 | 34 | 35 | @Override 36 | @Bean 37 | public KeyGenerator keyGenerator() { 38 | return (target, method, params) -> { 39 | StringBuffer sb = new StringBuffer(); 40 | sb.append(target.getClass().getName()); 41 | sb.append(method.getName()); 42 | for (Object obj : params) { 43 | sb.append(obj.toString()); 44 | } 45 | return sb.toString(); 46 | }; 47 | } 48 | 49 | 50 | // 缓存管理器 51 | @Override 52 | @Bean 53 | public CacheManager cacheManager() { 54 | RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager.RedisCacheManagerBuilder 55 | .fromConnectionFactory(lettuceConnectionFactory); 56 | @SuppressWarnings("serial") 57 | Set cacheNames = new HashSet() { 58 | { 59 | add("codeNameCache"); 60 | } 61 | }; 62 | builder.initialCacheNames(cacheNames); 63 | return builder.build(); 64 | } 65 | 66 | @Bean 67 | public HashOperations hashOperations(RedisTemplate redisTemplate) { 68 | return redisTemplate.opsForHash(); 69 | } 70 | 71 | @Bean 72 | public ValueOperations valueOperations(RedisTemplate redisTemplate) { 73 | return redisTemplate.opsForValue(); 74 | } 75 | 76 | @Bean 77 | public ListOperations listOperations(RedisTemplate redisTemplate) { 78 | return redisTemplate.opsForList(); 79 | } 80 | 81 | @Bean 82 | public SetOperations setOperations(RedisTemplate redisTemplate) { 83 | return redisTemplate.opsForSet(); 84 | } 85 | 86 | @Bean 87 | public ZSetOperations zSetOperations(RedisTemplate redisTemplate) { 88 | return redisTemplate.opsForZSet(); 89 | } 90 | 91 | /** 92 | * RedisTemplate配置 93 | */ 94 | @Bean 95 | public RedisTemplate redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) { 96 | // 设置序列化 97 | Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer( 98 | Object.class); 99 | ObjectMapper om = new ObjectMapper(); 100 | om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); 101 | om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); 102 | jackson2JsonRedisSerializer.setObjectMapper(om); 103 | // 配置redisTemplate 104 | RedisTemplate redisTemplate = new RedisTemplate(); 105 | redisTemplate.setConnectionFactory(lettuceConnectionFactory); 106 | RedisSerializer> stringSerializer = new StringRedisSerializer(); 107 | // key序列化 108 | redisTemplate.setKeySerializer(stringSerializer); 109 | // value序列化 110 | redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); 111 | // Hash key序列化 112 | redisTemplate.setHashKeySerializer(stringSerializer); 113 | // Hash value序列化 114 | redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); 115 | redisTemplate.afterPropertiesSet(); 116 | return redisTemplate; 117 | } 118 | } 119 | --------------------------------------------------------------------------------