├── .gitignore
├── .mvn
└── wrapper
│ ├── MavenWrapperDownloader.java
│ ├── maven-wrapper.jar
│ └── maven-wrapper.properties
├── Img
├── hot.png
├── index.png
├── online.png
├── position.png
└── see.png
├── README.md
├── debug.log
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
├── main
├── java
│ └── com
│ │ └── boss
│ │ └── spider
│ │ └── position
│ │ ├── PositionApplication.java
│ │ ├── controller
│ │ ├── CookieUploadController.java
│ │ ├── IndexController.java
│ │ ├── MapCompanyController.java
│ │ └── PositionController.java
│ │ ├── dao
│ │ ├── CookiesMapper.java
│ │ ├── HotWordMapper.java
│ │ ├── PositionMapper.java
│ │ └── SalaryViewMapper.java
│ │ ├── entity
│ │ ├── Cookies.java
│ │ ├── EnchartsSalary.java
│ │ ├── HotWord.java
│ │ ├── Point.java
│ │ ├── Position.java
│ │ └── SalaryView.java
│ │ ├── enums
│ │ ├── CityEnum.java
│ │ └── SalaryEnum.java
│ │ ├── mongodb
│ │ └── InsertPositionMongo.java
│ │ ├── service
│ │ ├── HotWordService.java
│ │ ├── InsertCookiesService.java
│ │ ├── PositionService.java
│ │ ├── SalaryViewService.java
│ │ └── impl
│ │ │ ├── HotWordServiceImpl.java
│ │ │ ├── InsertCookiesServiceImpl.java
│ │ │ ├── PositionServiceImpl.java
│ │ │ └── SalaryViewServiceImpl.java
│ │ └── utils
│ │ ├── BossPositionHandlerPositionUtil.java
│ │ ├── BossSeedTSJsNameUtil.java
│ │ ├── MapPointHandlerUtil.java
│ │ ├── SalaryAnalysisUtil.java
│ │ └── jsCookieUtil.java
└── resources
│ ├── application.properties
│ ├── static
│ ├── PageJs
│ │ ├── commons.js
│ │ ├── commons.min.js
│ │ ├── echarts.min.js
│ │ ├── index.js
│ │ └── index.min.js
│ ├── css
│ │ ├── jqcloud.css
│ │ └── jqcloud.min.css
│ ├── images
│ │ ├── content.jpg
│ │ ├── index.jpg
│ │ ├── logo.ico
│ │ └── spider-man.png
│ ├── js
│ │ └── Vue.js
│ └── layui
│ │ ├── css
│ │ ├── layui.css
│ │ ├── layui.mobile.css
│ │ └── modules
│ │ │ ├── code.css
│ │ │ ├── laydate
│ │ │ └── default
│ │ │ │ └── laydate.css
│ │ │ └── layer
│ │ │ └── default
│ │ │ ├── icon-ext.png
│ │ │ ├── icon.png
│ │ │ ├── layer.css
│ │ │ ├── loading-0.gif
│ │ │ ├── loading-1.gif
│ │ │ └── loading-2.gif
│ │ ├── font
│ │ ├── iconfont.eot
│ │ ├── iconfont.svg
│ │ ├── iconfont.ttf
│ │ ├── iconfont.woff
│ │ └── iconfont.woff2
│ │ ├── images
│ │ └── face
│ │ │ ├── 0.gif
│ │ │ ├── 1.gif
│ │ │ ├── 10.gif
│ │ │ ├── 11.gif
│ │ │ ├── 12.gif
│ │ │ ├── 13.gif
│ │ │ ├── 14.gif
│ │ │ ├── 15.gif
│ │ │ ├── 16.gif
│ │ │ ├── 17.gif
│ │ │ ├── 18.gif
│ │ │ ├── 19.gif
│ │ │ ├── 2.gif
│ │ │ ├── 20.gif
│ │ │ ├── 21.gif
│ │ │ ├── 22.gif
│ │ │ ├── 23.gif
│ │ │ ├── 24.gif
│ │ │ ├── 25.gif
│ │ │ ├── 26.gif
│ │ │ ├── 27.gif
│ │ │ ├── 28.gif
│ │ │ ├── 29.gif
│ │ │ ├── 3.gif
│ │ │ ├── 30.gif
│ │ │ ├── 31.gif
│ │ │ ├── 32.gif
│ │ │ ├── 33.gif
│ │ │ ├── 34.gif
│ │ │ ├── 35.gif
│ │ │ ├── 36.gif
│ │ │ ├── 37.gif
│ │ │ ├── 38.gif
│ │ │ ├── 39.gif
│ │ │ ├── 4.gif
│ │ │ ├── 40.gif
│ │ │ ├── 41.gif
│ │ │ ├── 42.gif
│ │ │ ├── 43.gif
│ │ │ ├── 44.gif
│ │ │ ├── 45.gif
│ │ │ ├── 46.gif
│ │ │ ├── 47.gif
│ │ │ ├── 48.gif
│ │ │ ├── 49.gif
│ │ │ ├── 5.gif
│ │ │ ├── 50.gif
│ │ │ ├── 51.gif
│ │ │ ├── 52.gif
│ │ │ ├── 53.gif
│ │ │ ├── 54.gif
│ │ │ ├── 55.gif
│ │ │ ├── 56.gif
│ │ │ ├── 57.gif
│ │ │ ├── 58.gif
│ │ │ ├── 59.gif
│ │ │ ├── 6.gif
│ │ │ ├── 60.gif
│ │ │ ├── 61.gif
│ │ │ ├── 62.gif
│ │ │ ├── 63.gif
│ │ │ ├── 64.gif
│ │ │ ├── 65.gif
│ │ │ ├── 66.gif
│ │ │ ├── 67.gif
│ │ │ ├── 68.gif
│ │ │ ├── 69.gif
│ │ │ ├── 7.gif
│ │ │ ├── 70.gif
│ │ │ ├── 71.gif
│ │ │ ├── 8.gif
│ │ │ └── 9.gif
│ │ ├── lay
│ │ └── modules
│ │ │ ├── carousel.js
│ │ │ ├── code.js
│ │ │ ├── colorpicker.js
│ │ │ ├── element.js
│ │ │ ├── flow.js
│ │ │ ├── form.js
│ │ │ ├── jquery.js
│ │ │ ├── laydate.js
│ │ │ ├── layedit.js
│ │ │ ├── layer.js
│ │ │ ├── laypage.js
│ │ │ ├── laytpl.js
│ │ │ ├── mobile.js
│ │ │ ├── rate.js
│ │ │ ├── slider.js
│ │ │ ├── table.js
│ │ │ ├── transfer.js
│ │ │ ├── tree.js
│ │ │ ├── upload.js
│ │ │ └── util.js
│ │ ├── layui.all.js
│ │ └── layui.js
│ └── templates
│ └── index.html
└── test
└── java
└── com
└── boss
└── spider
└── position
├── CodeCookieApplication.java
└── PositionApplicationTests.java
/.gitignore:
--------------------------------------------------------------------------------
1 | HELP.md
2 | target/
3 | !.mvn/wrapper/maven-wrapper.jar
4 | !**/src/main/**/target/
5 | !**/src/test/**/target/
6 |
7 | ### STS ###
8 | .apt_generated
9 | .classpath
10 | .factorypath
11 | .project
12 | .settings
13 | .springBeans
14 | .sts4-cache
15 |
16 | ### IntelliJ IDEA ###
17 | .idea
18 | *.iws
19 | *.iml
20 | *.ipr
21 |
22 | ### NetBeans ###
23 | /nbproject/private/
24 | /nbbuild/
25 | /dist/
26 | /nbdist/
27 | /.nb-gradle/
28 | build/
29 | !**/src/main/**/build/
30 | !**/src/test/**/build/
31 |
32 | ### VS Code ###
33 | .vscode/
34 |
--------------------------------------------------------------------------------
/.mvn/wrapper/MavenWrapperDownloader.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2007-present the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | import java.net.*;
18 | import java.io.*;
19 | import java.nio.channels.*;
20 | import java.util.Properties;
21 |
22 | public class MavenWrapperDownloader {
23 |
24 | private static final String WRAPPER_VERSION = "0.5.6";
25 | /**
26 | * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
27 | */
28 | private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
29 | + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
30 |
31 | /**
32 | * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
33 | * use instead of the default one.
34 | */
35 | private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
36 | ".mvn/wrapper/maven-wrapper.properties";
37 |
38 | /**
39 | * Path where the maven-wrapper.jar will be saved to.
40 | */
41 | private static final String MAVEN_WRAPPER_JAR_PATH =
42 | ".mvn/wrapper/maven-wrapper.jar";
43 |
44 | /**
45 | * Name of the property which should be used to override the default download url for the wrapper.
46 | */
47 | private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
48 |
49 | public static void main(String args[]) {
50 | System.out.println("- Downloader started");
51 | File baseDirectory = new File(args[0]);
52 | System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
53 |
54 | // If the maven-wrapper.properties exists, read it and check if it contains a custom
55 | // wrapperUrl parameter.
56 | File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
57 | String url = DEFAULT_DOWNLOAD_URL;
58 | if (mavenWrapperPropertyFile.exists()) {
59 | FileInputStream mavenWrapperPropertyFileInputStream = null;
60 | try {
61 | mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
62 | Properties mavenWrapperProperties = new Properties();
63 | mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
64 | url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
65 | } catch (IOException e) {
66 | System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
67 | } finally {
68 | try {
69 | if (mavenWrapperPropertyFileInputStream != null) {
70 | mavenWrapperPropertyFileInputStream.close();
71 | }
72 | } catch (IOException e) {
73 | // Ignore ...
74 | }
75 | }
76 | }
77 | System.out.println("- Downloading from: " + url);
78 |
79 | File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
80 | if (!outputFile.getParentFile().exists()) {
81 | if (!outputFile.getParentFile().mkdirs()) {
82 | System.out.println(
83 | "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
84 | }
85 | }
86 | System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
87 | try {
88 | downloadFileFromURL(url, outputFile);
89 | System.out.println("Done");
90 | System.exit(0);
91 | } catch (Throwable e) {
92 | System.out.println("- Error downloading");
93 | e.printStackTrace();
94 | System.exit(1);
95 | }
96 | }
97 |
98 | private static void downloadFileFromURL(String urlString, File destination) throws Exception {
99 | if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
100 | String username = System.getenv("MVNW_USERNAME");
101 | char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
102 | Authenticator.setDefault(new Authenticator() {
103 | @Override
104 | protected PasswordAuthentication getPasswordAuthentication() {
105 | return new PasswordAuthentication(username, password);
106 | }
107 | });
108 | }
109 | URL website = new URL(urlString);
110 | ReadableByteChannel rbc;
111 | rbc = Channels.newChannel(website.openStream());
112 | FileOutputStream fos = new FileOutputStream(destination);
113 | fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
114 | fos.close();
115 | rbc.close();
116 | }
117 |
118 | }
119 |
--------------------------------------------------------------------------------
/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
3 |
--------------------------------------------------------------------------------
/Img/hot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/Img/hot.png
--------------------------------------------------------------------------------
/Img/index.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/Img/index.png
--------------------------------------------------------------------------------
/Img/online.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/Img/online.png
--------------------------------------------------------------------------------
/Img/position.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/Img/position.png
--------------------------------------------------------------------------------
/Img/see.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/Img/see.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## 技术栈
2 |
3 | ### 前端:jQuery,map.baidu+Encharts,jQCloud,layui
4 |
5 | ### 后端:SpringBoot,Mysql8.23,Thymeleaf,Mongodb,Mybatis,PageHelper,Jsoup,selenium
6 |
7 | ## 网站分析
8 |
9 | ### **页面url分析**
10 |
11 | `https://www.zhipin.com/c101230100/y_4/?query=java%E5%BC%80%E5%8F%91%E5%AE%9E%E4%B9%A0%E7%94%9F&ka=sel-salary-4`
12 |
13 | **Result**:`https://www.zhipin.com/c+城市序列id+/y_工资分段序号-s_规模序列号/?query=关键词&ka=sel-salary-工资分段序号`
14 |
15 | ### **城市序号:**
16 |
17 | ```txt
18 | 100010000 全国
19 | 直辖市
20 | 101010100 北京
21 | 101020100 上海
22 | 101040100 重庆
23 | 福建区号:10123 子号 : 0100 福州 — 0900 南平
24 | 广东区号:10128 子号 : 0100 广州 — 2100 汕尾
25 | 四川区号:10127 子号 : 0100 成都 — 2100 甘孜藏族自治州
26 | 贵州区号:10126 子号 : 0100 贵阳 — 0600 六盘水
27 | 广西区号:10130 子号 : 0100 南宁 — 1400 防城港
28 | ```
29 |
30 | ### 说明:由于cookie设计到自己的登录之后才可大量进行爬取,我们最好进行登录cookie的获取,这里获取到的cookie就长期可爬
31 |
32 | ## 网站展示
33 |
34 | ### **首页**
35 |
36 | 
37 |
38 | ### **在线爬取**
39 |
40 | 
41 |
42 | ### **工资数据地区可视化**
43 |
44 | 
45 |
46 | ### 某职位公司位置
47 |
48 | 
49 |
50 | ### 热词统计
51 |
52 | 
53 |
54 | ## 尾言自述
55 |
56 | **本项目没有写的特别完美,本着对自己想要的需求的实现,这些功能也能满足大部分使用对自己想要搜寻的岗位进行查找分析了**
57 |
--------------------------------------------------------------------------------
/debug.log:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/debug.log
--------------------------------------------------------------------------------
/mvnw.cmd:
--------------------------------------------------------------------------------
1 | @REM ----------------------------------------------------------------------------
2 | @REM Licensed to the Apache Software Foundation (ASF) under one
3 | @REM or more contributor license agreements. See the NOTICE file
4 | @REM distributed with this work for additional information
5 | @REM regarding copyright ownership. The ASF licenses this file
6 | @REM to you under the Apache License, Version 2.0 (the
7 | @REM "License"); you may not use this file except in compliance
8 | @REM with the License. You may obtain a copy of the License at
9 | @REM
10 | @REM https://www.apache.org/licenses/LICENSE-2.0
11 | @REM
12 | @REM Unless required by applicable law or agreed to in writing,
13 | @REM software distributed under the License is distributed on an
14 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 | @REM KIND, either express or implied. See the License for the
16 | @REM specific language governing permissions and limitations
17 | @REM under the License.
18 | @REM ----------------------------------------------------------------------------
19 |
20 | @REM ----------------------------------------------------------------------------
21 | @REM Maven Start Up Batch script
22 | @REM
23 | @REM Required ENV vars:
24 | @REM JAVA_HOME - location of a JDK home dir
25 | @REM
26 | @REM Optional ENV vars
27 | @REM M2_HOME - location of maven2's installed home dir
28 | @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
29 | @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
30 | @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
31 | @REM e.g. to debug Maven itself, use
32 | @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
33 | @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
34 | @REM ----------------------------------------------------------------------------
35 |
36 | @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
37 | @echo off
38 | @REM set title of command window
39 | title %0
40 | @REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
41 | @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
42 |
43 | @REM set %HOME% to equivalent of $HOME
44 | if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
45 |
46 | @REM Execute a user defined script before this one
47 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
48 | @REM check for pre script, once with legacy .bat ending and once with .cmd ending
49 | if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
50 | if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
51 | :skipRcPre
52 |
53 | @setlocal
54 |
55 | set ERROR_CODE=0
56 |
57 | @REM To isolate internal variables from possible post scripts, we use another setlocal
58 | @setlocal
59 |
60 | @REM ==== START VALIDATION ====
61 | if not "%JAVA_HOME%" == "" goto OkJHome
62 |
63 | echo.
64 | echo Error: JAVA_HOME not found in your environment. >&2
65 | echo Please set the JAVA_HOME variable in your environment to match the >&2
66 | echo location of your Java installation. >&2
67 | echo.
68 | goto error
69 |
70 | :OkJHome
71 | if exist "%JAVA_HOME%\bin\java.exe" goto init
72 |
73 | echo.
74 | echo Error: JAVA_HOME is set to an invalid directory. >&2
75 | echo JAVA_HOME = "%JAVA_HOME%" >&2
76 | echo Please set the JAVA_HOME variable in your environment to match the >&2
77 | echo location of your Java installation. >&2
78 | echo.
79 | goto error
80 |
81 | @REM ==== END VALIDATION ====
82 |
83 | :init
84 |
85 | @REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
86 | @REM Fallback to current working directory if not found.
87 |
88 | set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
89 | IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
90 |
91 | set EXEC_DIR=%CD%
92 | set WDIR=%EXEC_DIR%
93 | :findBaseDir
94 | IF EXIST "%WDIR%"\.mvn goto baseDirFound
95 | cd ..
96 | IF "%WDIR%"=="%CD%" goto baseDirNotFound
97 | set WDIR=%CD%
98 | goto findBaseDir
99 |
100 | :baseDirFound
101 | set MAVEN_PROJECTBASEDIR=%WDIR%
102 | cd "%EXEC_DIR%"
103 | goto endDetectBaseDir
104 |
105 | :baseDirNotFound
106 | set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
107 | cd "%EXEC_DIR%"
108 |
109 | :endDetectBaseDir
110 |
111 | IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
112 |
113 | @setlocal EnableExtensions EnableDelayedExpansion
114 | for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
115 | @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
116 |
117 | :endReadAdditionalConfig
118 |
119 | SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
120 | set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
121 | set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
122 |
123 | set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
124 |
125 | FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
126 | IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
127 | )
128 |
129 | @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
130 | @REM This allows using the maven wrapper in projects that prohibit checking in binary data.
131 | if exist %WRAPPER_JAR% (
132 | if "%MVNW_VERBOSE%" == "true" (
133 | echo Found %WRAPPER_JAR%
134 | )
135 | ) else (
136 | if not "%MVNW_REPOURL%" == "" (
137 | SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
138 | )
139 | if "%MVNW_VERBOSE%" == "true" (
140 | echo Couldn't find %WRAPPER_JAR%, downloading it ...
141 | echo Downloading from: %DOWNLOAD_URL%
142 | )
143 |
144 | powershell -Command "&{"^
145 | "$webclient = new-object System.Net.WebClient;"^
146 | "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
147 | "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
148 | "}"^
149 | "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
150 | "}"
151 | if "%MVNW_VERBOSE%" == "true" (
152 | echo Finished downloading %WRAPPER_JAR%
153 | )
154 | )
155 | @REM End of extension
156 |
157 | @REM Provide a "standardized" way to retrieve the CLI args that will
158 | @REM work with both Windows and non-Windows executions.
159 | set MAVEN_CMD_LINE_ARGS=%*
160 |
161 | %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
162 | if ERRORLEVEL 1 goto error
163 | goto end
164 |
165 | :error
166 | set ERROR_CODE=1
167 |
168 | :end
169 | @endlocal & set ERROR_CODE=%ERROR_CODE%
170 |
171 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
172 | @REM check for post script, once with legacy .bat ending and once with .cmd ending
173 | if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
174 | if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
175 | :skipRcPost
176 |
177 | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
178 | if "%MAVEN_BATCH_PAUSE%" == "on" pause
179 |
180 | if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
181 |
182 | exit /B %ERROR_CODE%
183 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | org.springframework.boot
7 | spring-boot-starter-parent
8 | 2.4.1
9 |
10 |
11 | com.boss.spider
12 | position
13 | 0.0.1-SNAPSHOT
14 | position
15 | Spring Boot for Spider
16 |
17 |
18 | 11
19 |
20 |
21 |
22 |
23 | org.springframework.boot
24 | spring-boot-starter-data-mongodb
25 |
26 |
27 | org.springframework.boot
28 | spring-boot-starter-thymeleaf
29 |
30 |
31 | org.springframework.boot
32 | spring-boot-starter-web
33 |
34 |
35 |
36 | mysql
37 | mysql-connector-java
38 | 8.0.18
39 |
40 |
41 | com.alibaba
42 | druid
43 | 1.1.21
44 |
45 |
46 |
47 |
48 | org.apache.httpcomponents
49 | httpclient
50 | 4.5.12
51 |
52 |
53 |
54 | org.jsoup
55 | jsoup
56 | 1.11.3
57 |
58 |
59 |
60 | org.junit.platform
61 | junit-platform-launcher
62 | test
63 |
64 |
65 | org.springframework.boot
66 | spring-boot-starter-test
67 | test
68 |
69 |
70 |
71 | org.seleniumhq.selenium
72 | selenium-java
73 | 3.141.59
74 |
75 |
76 |
77 | org.mybatis.spring.boot
78 | mybatis-spring-boot-starter
79 | 2.1.4
80 |
81 |
82 | org.springframework.boot
83 | spring-boot-devtools
84 | true
85 |
86 |
87 |
88 | com.github.pagehelper
89 | pagehelper
90 | 5.1.2
91 |
92 |
93 | com.github.pagehelper
94 | pagehelper-spring-boot-autoconfigure
95 | 1.2.3
96 |
97 |
98 | com.github.pagehelper
99 | pagehelper-spring-boot-starter
100 | 1.2.3
101 |
102 |
103 |
104 | net.sourceforge.htmlunit
105 | htmlunit
106 | 2.40.0
107 |
108 |
109 |
110 |
111 |
112 |
113 | org.springframework.boot
114 | spring-boot-maven-plugin
115 |
116 |
117 |
118 |
119 |
120 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/PositionApplication.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position;
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.autoconfigure.jdbc.DataSourceAutoConfiguration;
7 |
8 | @SpringBootApplication
9 | @MapperScan("com.boss.spider.position.dao")
10 | public class PositionApplication {
11 |
12 | public static void main(String[] args) {
13 | SpringApplication.run(PositionApplication.class, args);
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/controller/CookieUploadController.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.controller;
2 |
3 | import com.boss.spider.position.dao.CookiesMapper;
4 | import com.boss.spider.position.entity.Cookies;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.PostMapping;
7 | import org.springframework.web.bind.annotation.RequestMapping;
8 | import org.springframework.web.bind.annotation.RequestParam;
9 | import org.springframework.web.bind.annotation.RestController;
10 | import org.springframework.web.multipart.MultipartFile;
11 |
12 | import java.io.BufferedReader;
13 | import java.io.InputStream;
14 | import java.io.InputStreamReader;
15 | import java.util.HashMap;
16 | import java.util.Map;
17 |
18 | /**
19 | * @author minnan
20 | * @date 2021/2/10-17:48
21 | */
22 | @RestController
23 | @RequestMapping("/upload")
24 | public class CookieUploadController {
25 | @Autowired
26 | private CookiesMapper cookiesMapper;
27 | //文件上传
28 | @PostMapping("/cookie")
29 | public Map uploadCookie(@RequestParam("file")MultipartFile file){
30 | Map modelMap=new HashMap<>();
31 | if (file.isEmpty()){
32 | modelMap.put("success", false);
33 | modelMap.put("errMsg", "上传失败,请选择文件!");
34 | return modelMap;
35 | }
36 | if(!file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1).contains("txt")){
37 | modelMap.put("success", false);
38 | modelMap.put("errMsg", "上传失败,文件类型仅限txt");
39 | return modelMap;
40 | }
41 | InputStream is=null;
42 | BufferedReader reader=null;
43 | int effectRow=0;
44 | try {
45 | is=file.getInputStream();
46 | if(!new BufferedReader(new InputStreamReader(file.getInputStream())).readLine().matches(".*?%3D")){
47 | modelMap.put("success", false);
48 | modelMap.put("errMsg", "不符合stoken格式");
49 | return modelMap;
50 | }
51 | Cookies cookies=new Cookies();
52 | reader =new BufferedReader(new InputStreamReader(is));
53 | String str=null;
54 | while (true){
55 | str=reader.readLine();
56 | if (str!=null){
57 | cookies.setCookieValue(str);
58 | cookiesMapper.insertCookies(cookies);
59 | effectRow++;
60 | }else
61 | break;
62 | }
63 | }catch (Exception e){
64 | modelMap.put("success", false);
65 | modelMap.put("errMsg", "上传失败,"+e.getMessage());
66 | return modelMap;
67 | }finally {
68 | try {
69 | if (is!=null)
70 | is.close();
71 | if (reader!=null)
72 | reader.close();
73 | }catch (Exception e){}
74 | }
75 | modelMap.put("success", true);
76 | modelMap.put("count","已提供"+effectRow+"STOKEN");
77 | return modelMap;
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/controller/IndexController.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.controller;
2 |
3 | import org.springframework.stereotype.Controller;
4 | import org.springframework.web.bind.annotation.GetMapping;
5 |
6 | /**
7 | * @author minnan
8 | * @date 2021/1/23-22:07
9 | */
10 | @Controller
11 | public class IndexController {
12 | @GetMapping("Index")
13 | public String spiderIndex(){return "index";}
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/controller/MapCompanyController.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.controller;
2 |
3 | import com.boss.spider.position.entity.Point;
4 | import com.boss.spider.position.entity.Position;
5 | import com.boss.spider.position.service.PositionService;
6 | import com.boss.spider.position.utils.MapPointHandlerUtil;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.web.bind.annotation.*;
9 |
10 | import java.util.*;
11 |
12 | /**
13 | * @author minnan
14 | * @date 2021/2/4-18:05
15 | */
16 | @RestController
17 | @RequestMapping(value = "/Map",method = {RequestMethod.GET,RequestMethod.POST,RequestMethod.PUT})
18 | public class MapCompanyController {
19 |
20 | @Autowired
21 | private PositionService positionService;
22 | @GetMapping("/getCompany/{keyWord}/{city}")
23 | public Map getCompany(@PathVariable("keyWord")String keyWord,
24 | @PathVariable("city")String city){
25 | Map modelMap=new HashMap<>();
26 | if (keyWord!=null&&city!=null){
27 | Position position=new Position();
28 | position.setPositionTitle(keyWord);
29 | position.setPositionCity(city);
30 | List positions=positionService.findPositionForPoint(position);
31 | List area=new ArrayList<>();
32 | positions.forEach((pos)->{area.add(pos.getPositionArea());});
33 | if (area.size()>0){
34 | List points=new ArrayList<>();
35 | area.forEach((tempArea)->{points.add(MapPointHandlerUtil.getPoint(tempArea));});
36 | modelMap.put("success", true);
37 | modelMap.put("points",points);
38 | return modelMap;
39 | }
40 | modelMap.put("success", false);
41 | modelMap.put("errMsg", "未成功获取公司位置");
42 | return modelMap;
43 | }
44 | modelMap.put("success", false);
45 | modelMap.put("errMsg", "当前未成功获取到职位,城市");
46 | return modelMap;
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/controller/PositionController.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.controller;
2 |
3 | import com.boss.spider.position.dao.CookiesMapper;
4 | import com.boss.spider.position.dao.HotWordMapper;
5 | import com.boss.spider.position.entity.Cookies;
6 | import com.boss.spider.position.entity.EnchartsSalary;
7 | import com.boss.spider.position.entity.HotWord;
8 | import com.boss.spider.position.entity.Position;
9 | import com.boss.spider.position.enums.CityEnum;
10 | import com.boss.spider.position.enums.SalaryEnum;
11 | import com.boss.spider.position.service.PositionService;
12 | import com.boss.spider.position.utils.BossPositionHandlerPositionUtil;
13 | import com.boss.spider.position.utils.SalaryAnalysisUtil;
14 | import com.github.pagehelper.PageHelper;
15 | import com.github.pagehelper.PageInfo;
16 | import org.apache.http.HttpEntity;
17 | import org.apache.http.cookie.Cookie;
18 | import org.apache.http.message.BasicHeader;
19 | import org.apache.http.util.EntityUtils;
20 | import org.jsoup.select.Elements;
21 | import org.springframework.beans.factory.annotation.Autowired;
22 | import org.springframework.web.bind.annotation.*;
23 |
24 | import java.util.ArrayList;
25 | import java.util.HashMap;
26 | import java.util.List;
27 | import java.util.Map;
28 |
29 | /**
30 | * @author minnan
31 | * @date 2021/1/26-16:17
32 | */
33 | @RestController
34 | @RequestMapping("/position")
35 | public class PositionController {
36 | private final static String[] _ZP_STOKENS={'登录cookie信息'};//美国号 252
37 | @Autowired
38 | private PositionService positionService;
39 | @Autowired
40 | private CookiesMapper cookiesMapper;
41 | @Autowired
42 | private HotWordMapper hotWordMapper;
43 | @Autowired
44 | private SalaryAnalysisUtil salaryAnalysisUtil;
45 | @GetMapping("/getPosition")
46 | public List getPosition(@RequestParam(value = "pageNum",defaultValue = "1")int pageNum,
47 | @RequestParam(value = "pageSize",defaultValue = "5")int pageSize,
48 | @RequestParam(value = "keyWord",defaultValue = "")String keyWord,
49 | @RequestParam(value = "city",defaultValue = "")String city){
50 | PageHelper.startPage(pageNum, pageSize);
51 |
52 | List positions;
53 | if (keyWord.equals("")&&city.equals("")){
54 | positions=positionService.findPositionLikeByTitle("java");
55 | }else {
56 | Position position=new Position();
57 | position.setPositionTitle(keyWord);
58 | position.setPositionCity(city);
59 | positions=positionService.findPositionLikeByCity(position);
60 | }
61 | PageInfo pageInfo=new PageInfo<>(positions,pageSize);
62 | return positions;
63 | }
64 | @GetMapping("/getCount/{keyWord}/{city}")
65 | public String getCount(@PathVariable String keyWord,@PathVariable String city){
66 | String count="0";
67 | if (keyWord.equals("kill")&&city.equals("you")){
68 | return count=String.valueOf(positionService.findPositionLikeByTitle("java").size());
69 | }
70 | Position position=new Position();
71 | position.setPositionTitle(keyWord);
72 | position.setPositionCity(city);
73 | count=String.valueOf(positionService.findPositionLikeByCity(position).size());
74 | return count;
75 | }
76 | @PostMapping("/addPos")
77 | public Map submitPosition(@RequestParam("keyWord")String keyWord,
79 | @RequestParam("city")String city,
80 | @RequestParam("salary")String salary){
81 | Map modelMap=new HashMap<>();
82 | String url="https://www.zhipin.com/";
83 | if (!city.equals("")){
84 | url+="c"+ CityEnum.getCode(city);
85 | }else {
86 | modelMap.put("success", false);
87 | modelMap.put("errMsg","未成功获取到城市信息");
88 | return modelMap;
89 | }
90 | if (!salary.equals("")){
91 | url+="/y_"+ SalaryEnum.getName(salary).substring(SalaryEnum.getName(salary).length()-1);
92 | }
93 | if (!keyWord.equals("")){
94 | if (url.contains("y_")){
95 | url+="&query="+keyWord;
96 | }else
97 | url+="/?query="+keyWord;
98 | }
99 | List headers=new ArrayList<>();
100 | try{
101 | int i=0;
102 | for (int j=1;j<=5;j++){
103 | //添加headers
104 | List cookies=cookiesMapper.findALL();
105 | if (cookies.size()==0){
106 | modelMap.put("success", false);
107 | modelMap.put("errMsg", "动态cookie已用完,请管理员继续添加!");
108 | modelMap.put("count", "成功爬取条数"+i);
109 | modelMap.put("url", "/");
110 | return modelMap;
111 | }
112 | if (url.contains("page="))
113 | url=url.substring(0, url.indexOf("page="))+"&page="+j;
114 | else
115 | url+="&page="+j;
116 | System.out.println("爬取网址:"+url);
117 | headers.add(new BasicHeader("user-agent", "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/84.0"));
118 | int k=(int) (Math.random()*_ZP_STOKENS.length);
119 | System.out.println("这是第"+k+"个cookie");
120 | headers.add(new BasicHeader("cookie",_ZP_STOKENS[k]+
121 | cookies.get(0).getCookieValue()));
122 | //获取entity
123 | HttpEntity entity=BossPositionHandlerPositionUtil.httpGetHtml(url, null, headers);
124 | String isFake=EntityUtils.toString(entity, "utf-8");
125 | System.out.println(isFake);
126 |
127 | if(isFake.contains("点击进行验证")){
128 | cookiesMapper.DeleteCookie(cookies.get(0).getCookieId());
129 | modelMap.put("success", false);
130 | modelMap.put("errMsg", "需要进行验证爬取");
131 | modelMap.put("url", "/");
132 | return modelMap;
133 | }
134 | if(isFake.contains("正在加载中")){
135 | cookiesMapper.DeleteCookie(cookies.get(0).getCookieId());
136 | modelMap.put("success", false);
137 | modelMap.put("errMsg", "cookie失效,请重试!");
138 | modelMap.put("url", "/");
139 | return modelMap;
140 | }
141 | Elements elements=BossPositionHandlerPositionUtil.getFirstElements(isFake, "job-primary");
142 | if (elements.size()>0)
143 | for (Cookies cookie:cookies){
144 | cookiesMapper.DeleteCookie(cookie.getCookieId());
145 | }
146 | List positions=BossPositionHandlerPositionUtil.getPosition(elements, cookies,city,cookies.size()-1);
147 | if (positions!=null){
148 | for (Position position:positions){
149 | positionService.insertPositionService(position);
150 | i++;
151 | }
152 | List hotWordss= hotWordMapper.findHotWordALL();
153 | List words=new ArrayList<>();
154 | hotWordss.forEach(hotWord -> {words.add(hotWord.getHotWord());});
155 | int flag=0;
156 | for (String word:words) {
157 | if (!keyWord.equals(word)){
158 | flag++;
159 | }
160 | }
161 | if (flag==words.size())
162 | hotWordMapper.insertHotWord(new HotWord(null, keyWord));
163 | modelMap.put("success", true);
164 | modelMap.put("count", "成功爬取条数"+i);
165 | modelMap.put("url", "/");
166 | }else {
167 | modelMap.put("success", false);
168 | modelMap.put("errMsg","未成功爬取到岗位");
169 | return modelMap;
170 | }
171 | }
172 | } catch(Exception e){
173 | modelMap.put("success", false);
174 | modelMap.put("errMsg",e.getMessage());
175 | modelMap.put("url", "/");
176 | e.printStackTrace();
177 | }
178 | return modelMap;
179 | }
180 | @PostMapping("/getSalaryS")
181 | public Map getSalaryS(@RequestParam("keyWord")String keyWord){
182 | Map modelMap=new HashMap<>();
183 | if (keyWord!=null&&!keyWord.equals("")){
184 | try {
185 | List salaryS=salaryAnalysisUtil.AvgSalaryByArea(keyWord);
186 | if (salaryS!=null&&salaryS.size()>0){
187 | modelMap.put("success",true);
188 | modelMap.put("salaryS",salaryS);
189 | return modelMap;
190 | }else {
191 | modelMap.put("success",false);
192 | modelMap.put("errMsg","你未添加该字段,还未对该地区进行统计");
193 | modelMap.put("url","/");
194 | return modelMap;
195 | }
196 | }catch (Exception e){
197 | modelMap.put("success",false);
198 | modelMap.put("errMsg",e.getMessage());
199 | modelMap.put("url","/");
200 | return modelMap;
201 | }
202 | }
203 | modelMap.put("success",false);
204 | modelMap.put("errMsg","搜索关键词为空");
205 | modelMap.put("url","/");
206 | return modelMap;
207 | }
208 | @GetMapping("/infoSelect")
209 | public Map getInfo(){
210 | Map modelMap=new HashMap<>();
211 | List hotWords=hotWordMapper.findHotWordALL();
212 | if (hotWords != null && hotWords.size() > 0) {
213 | modelMap.put("success",true);
214 | modelMap.put("hotWords",hotWords);
215 | return modelMap;
216 | }
217 | modelMap.put("success",false);
218 | modelMap.put("errMsg","未有职位搜索信息");
219 | return modelMap;
220 | }
221 | }
222 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/dao/CookiesMapper.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.dao;
2 |
3 | import com.boss.spider.position.entity.Cookies;
4 | import org.apache.ibatis.annotations.Delete;
5 | import org.apache.ibatis.annotations.Insert;
6 | import org.apache.ibatis.annotations.Options;
7 | import org.apache.ibatis.annotations.Select;
8 |
9 | import java.util.List;
10 |
11 | /**
12 | * @author minnan
13 | * @date 2021/1/19-17:26
14 | */
15 | public interface CookiesMapper {
16 | @Insert({"INSERT INTO tb_cookies(cookie_id,cookie_value) " +
17 | "VALUES(null,#{cookieValue})"})
18 | @Options(useGeneratedKeys = true,keyColumn = "cookie_id",keyProperty = "cookieId")
19 | int insertCookies(Cookies cookies);
20 | @Select({"SELECT cookie_id,cookie_value FROM tb_cookies limit 31"})
21 | List findALL();
22 | @Delete({"DELETE FROM tb_cookies WHERE cookie_id=#{id}"})
23 | int DeleteCookie(Integer id);
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/dao/HotWordMapper.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.dao;
2 |
3 | import com.boss.spider.position.entity.HotWord;
4 | import org.apache.ibatis.annotations.Delete;
5 | import org.apache.ibatis.annotations.Insert;
6 | import org.apache.ibatis.annotations.Select;
7 |
8 | import java.util.List;
9 |
10 | /**
11 | * @author minnan
12 | * @date 2021/1/20-20:46
13 | */
14 | public interface HotWordMapper {
15 | @Insert({"INSERT INTO tb_hot(hot_id,hot_word) VALUES(null,#{hotWord})"})
16 | int insertHotWord(HotWord hotWord);
17 | @Select({"SELECT hot_id,hot_word FROM tb_hot"})
18 | List findHotWordALL();
19 | @Delete({"DELETE FROM tb_hot WHERE hot_id=#{id}"})
20 | int deleteHotWordById(Integer id);
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/dao/PositionMapper.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.dao;
2 |
3 | import com.boss.spider.position.entity.Position;
4 | import org.apache.ibatis.annotations.Insert;
5 | import org.apache.ibatis.annotations.Options;
6 | import org.apache.ibatis.annotations.Param;
7 | import org.apache.ibatis.annotations.Select;
8 |
9 | import java.util.List;
10 |
11 | /**
12 | * @author minnan
13 | * @date 2021/1/19-15:48
14 | */
15 | public interface PositionMapper {
16 |
17 | @Insert({"INSERT INTO tb_position(position_id,position_title,position_salary_range,position_link,position_require,position_company_SIZE,position_build_time,position_work_time,create_time,position_area,position_city,company_name) " +
18 | "VALUES(null,#{positionTitle},#{positionSalaryRange},#{positionLink},#{positionRequire},#{positionCompanySIZE},#{positionBuildTime},#{positionWorkTime},#{createTime},#{positionArea},#{positionCity},#{companyName})"})
19 | @Options(useGeneratedKeys = true,keyColumn = "position_id",keyProperty = "positionId")
20 | int insertPosition(Position position);
21 |
22 | @Select({"SELECT position_id,position_title,position_salary_range,position_link,position_require,position_company_SIZE,position_build_time,position_work_time,create_time,position_area,position_city,company_name " +
23 | "FROM tb_position WHERE position_title like concat('%',#{positionTitle},'%') and position_city=#{positionCity}"})
24 | List findPositionLikeCity(Position position);
25 | @Select({"SELECT position_area,position_city,company_name " +
26 | "FROM tb_position WHERE position_title like concat('%',#{positionTitle},'%') and position_city=#{positionCity} ORDER BY create_time DESC"})
27 | List findPositionForPoint(Position position);
28 | @Select({"SELECT position_id,position_title,position_salary_range,position_link,position_require,position_company_SIZE,position_build_time,position_work_time,create_time,position_area,position_city,company_name " +
29 | "FROM tb_position WHERE position_title like concat('%',#{keyWord},'%') ORDER BY create_time DESC"})
30 | List findPositionLike(String keyWord);
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/dao/SalaryViewMapper.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.dao;
2 |
3 | import com.boss.spider.position.entity.SalaryView;
4 | import org.apache.ibatis.annotations.Insert;
5 | import org.apache.ibatis.annotations.Select;
6 |
7 | import java.util.List;
8 |
9 | /**
10 | * @author minnan
11 | * @date 2021/1/23-19:57
12 | */
13 | public interface SalaryViewMapper {
14 | @Insert({"INSERT INTO tb_salaryview(salaryv_id,salaryv_avgrange,salaryv_area) VALUES(null,#{salaryvAvgrange},#{salaryvArea})"})
15 | int insertSalaryView(SalaryView salaryView);
16 | @Select({"SELECT salaryv_id,salaryv_avgrange,salaryv_area FROM tb_salaryview"})
17 | List findALL();
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/entity/Cookies.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.entity;
2 |
3 | /**
4 | * @author minnan
5 | * @date 2021/1/19-17:19
6 | */
7 | public class Cookies {
8 | private Integer cookieId;
9 | private String cookieValue;
10 | public Cookies(){}
11 | public Integer getCookieId() {
12 | return cookieId;
13 | }
14 |
15 | public void setCookieId(Integer cookieId) {
16 | this.cookieId = cookieId;
17 | }
18 |
19 | public String getCookieValue() {
20 | return cookieValue;
21 | }
22 |
23 | public void setCookieValue(String cookieValue) {
24 | this.cookieValue = cookieValue;
25 | }
26 |
27 | @Override
28 | public String toString() {
29 | return "Cookies{" +
30 | "cookieId=" + cookieId +
31 | ", cookieValue='" + cookieValue + '\'' +
32 | '}';
33 | }
34 | }
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/entity/EnchartsSalary.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.entity;
2 |
3 | /**
4 | * @author minnan
5 | * @date 2021/1/28-22:00
6 | */
7 | public class EnchartsSalary {
8 | //地区
9 | private String city;
10 | //平局工资
11 | private String salary;
12 | public EnchartsSalary(){}
13 |
14 | public EnchartsSalary(String city, String salary) {
15 | this.city = city;
16 | this.salary = salary;
17 | }
18 |
19 | public String getCity() {
20 | return city;
21 | }
22 |
23 | public void setCity(String city) {
24 | this.city = city;
25 | }
26 |
27 | public String getSalary() {
28 | return salary;
29 | }
30 |
31 | public void setSalary(String salary) {
32 | this.salary = salary;
33 | }
34 |
35 | @Override
36 | public String toString() {
37 | return "EnchartsSalary{" +
38 | "city='" + city + '\'' +
39 | ", salary='" + salary + '\'' +
40 | '}';
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/entity/HotWord.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.entity;
2 |
3 | /**
4 | * @author minnan
5 | * @date 2021/1/13-20:00
6 | */
7 | public class HotWord {
8 | private Integer hotId;
9 | private String hotWord;
10 | public HotWord(){}
11 | public HotWord(Integer hotId, String hotWord) {
12 | this.hotId = hotId;
13 | this.hotWord = hotWord;
14 | }
15 |
16 | public Integer getHotId() {
17 | return hotId;
18 | }
19 |
20 | public void setHotId(Integer hotId) {
21 | this.hotId = hotId;
22 | }
23 |
24 | public String getHotWord() {
25 | return hotWord;
26 | }
27 |
28 | public void setHotWord(String hotWord) {
29 | this.hotWord = hotWord;
30 | }
31 |
32 | @Override
33 | public String toString() {
34 | return "HotWord{" +
35 | "hotId=" + hotId +
36 | ", hotWord='" + hotWord + '\'' +
37 | '}';
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/entity/Point.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.entity;
2 |
3 | /**
4 | * @author minnan
5 | * @date 2021/2/1-20:04
6 | */
7 | public class Point {
8 | private String x;
9 | private String y;
10 | private String branch;
11 |
12 | public Point(String x, String y, String branch) {
13 | this.x = x;
14 | this.y = y;
15 | this.branch = branch;
16 | }
17 |
18 | public void setX(String x) {
19 | this.x = x;
20 | }
21 |
22 | public void setY(String y) {
23 | this.y = y;
24 | }
25 |
26 | public void setBranch(String branch) {
27 | this.branch = branch;
28 | }
29 |
30 | public String getX() {
31 | return x;
32 | }
33 |
34 | public String getY() {
35 | return y;
36 | }
37 |
38 | public String getBranch() {
39 | return branch;
40 | }
41 |
42 | @Override
43 | public String toString() {
44 | return "Point{" +
45 | "x='" + x + '\'' +
46 | ", y='" + y + '\'' +
47 | ", branch='" + branch + '\'' +
48 | '}';
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/entity/Position.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.entity;
2 |
3 | import java.util.Date;
4 |
5 | /**
6 | * @author minnan
7 | * @date 2021/1/13-19:50
8 | */
9 | public class Position {
10 | private Integer positionId;
11 | private String positionTitle;
12 | private String positionSalaryRange;
13 | private String positionLink;
14 | private String positionRequire;
15 | private String positionCompanySIZE;
16 | private String positionBuildTime;
17 | private Date positionWorkTime;
18 | private Date createTime;
19 | private String positionArea;
20 | private String positionCity;
21 | private String companyName;
22 | public Position() {
23 | }
24 |
25 | public Position(Integer positionId, String positionTitle, String positionSalaryRange, String positionLink, String positionRequire, String positionCompanySIZE, String positionBuildTime, Date positionWorkTime, Date createTime, String positionArea, String positionCity, String companyName) {
26 | this.positionId = positionId;
27 | this.positionTitle = positionTitle;
28 | this.positionSalaryRange = positionSalaryRange;
29 | this.positionLink = positionLink;
30 | this.positionRequire = positionRequire;
31 | this.positionCompanySIZE = positionCompanySIZE;
32 | this.positionBuildTime = positionBuildTime;
33 | this.positionWorkTime = positionWorkTime;
34 | this.createTime = createTime;
35 | this.positionArea = positionArea;
36 | this.positionCity = positionCity;
37 | this.companyName = companyName;
38 | }
39 |
40 | public Integer getPositionId() {
41 | return positionId;
42 | }
43 |
44 | public void setPositionId(Integer positionId) {
45 | this.positionId = positionId;
46 | }
47 |
48 | public String getPositionTitle() {
49 | return positionTitle;
50 | }
51 |
52 | public void setPositionTitle(String positionTitle) {
53 | this.positionTitle = positionTitle;
54 | }
55 |
56 | public String getPositionSalaryRange() {
57 | return positionSalaryRange;
58 | }
59 |
60 | public void setPositionSalaryRange(String positionSalaryRange) {
61 | this.positionSalaryRange = positionSalaryRange;
62 | }
63 |
64 | public String getPositionLink() {
65 | return positionLink;
66 | }
67 |
68 | public void setPositionLink(String positionLink) {
69 | this.positionLink = positionLink;
70 | }
71 |
72 | public String getPositionRequire() {
73 | return positionRequire;
74 | }
75 |
76 | public void setPositionRequire(String positionRequire) {
77 | this.positionRequire = positionRequire;
78 | }
79 |
80 | public String getPositionCompanySIZE() {
81 | return positionCompanySIZE;
82 | }
83 |
84 | public void setPositionCompanySIZE(String positionCompanySIZE) {
85 | this.positionCompanySIZE = positionCompanySIZE;
86 | }
87 |
88 | public String getPositionBuildTime() {
89 | return positionBuildTime;
90 | }
91 |
92 | public void setPositionBuildTime(String positionBuildTime) {
93 | this.positionBuildTime = positionBuildTime;
94 | }
95 |
96 | public Date getPositionWorkTime() {
97 | return positionWorkTime;
98 | }
99 |
100 | public void setPositionWorkTime(Date positionWorkTime) {
101 | this.positionWorkTime = positionWorkTime;
102 | }
103 |
104 | public Date getCreateTime() {
105 | return createTime;
106 | }
107 |
108 | public void setCreateTime(Date createTime) {
109 | this.createTime = createTime;
110 | }
111 |
112 | public String getPositionArea() {
113 | return positionArea;
114 | }
115 |
116 | public void setPositionArea(String positionArea) {
117 | this.positionArea = positionArea;
118 | }
119 |
120 | public String getPositionCity() {
121 | return positionCity;
122 | }
123 |
124 | public void setPositionCity(String positionCity) {
125 | this.positionCity = positionCity;
126 | }
127 |
128 | public String getCompanyName() {
129 | return companyName;
130 | }
131 |
132 | public void setCompanyName(String companyName) {
133 | this.companyName = companyName;
134 | }
135 |
136 | @Override
137 | public String toString() {
138 | return "Position{" +
139 | "positionId=" + positionId +
140 | ", positionTitle='" + positionTitle + '\'' +
141 | ", positionSalaryRange='" + positionSalaryRange + '\'' +
142 | ", positionLink='" + positionLink + '\'' +
143 | ", positionRequire='" + positionRequire + '\'' +
144 | ", positionCompanySIZE='" + positionCompanySIZE + '\'' +
145 | ", positionBuildTime='" + positionBuildTime + '\'' +
146 | ", positionWorkTime=" + positionWorkTime +
147 | ", createTime=" + createTime +
148 | ", positionArea='" + positionArea + '\'' +
149 | ", positionCity='" + positionCity + '\'' +
150 | ", companyName='" + companyName + '\'' +
151 | '}';
152 | }
153 | }
154 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/entity/SalaryView.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.entity;
2 |
3 | /**
4 | * @author minnan
5 | * @date 2021/1/23-19:58
6 | */
7 | public class SalaryView {
8 | private Integer salaryvId;
9 | private String salaryvAvgrange;
10 | private String salaryvArea;
11 |
12 | public Integer getSalaryvId() {
13 | return salaryvId;
14 | }
15 |
16 | public void setSalaryvId(Integer salaryvId) {
17 | this.salaryvId = salaryvId;
18 | }
19 |
20 | public String getSalaryvAvgrange() {
21 | return salaryvAvgrange;
22 | }
23 |
24 | public void setSalaryvAvgrange(String salaryvAvgrange) {
25 | this.salaryvAvgrange = salaryvAvgrange;
26 | }
27 |
28 | public String getSalaryvArea() {
29 | return salaryvArea;
30 | }
31 |
32 | public void setSalaryvArea(String salaryvArea) {
33 | this.salaryvArea = salaryvArea;
34 | }
35 |
36 | @Override
37 | public String toString() {
38 | return "SalaryView{" +
39 | "salaryvId=" + salaryvId +
40 | ", salaryvAvgrange='" + salaryvAvgrange + '\'' +
41 | ", salaryvArea='" + salaryvArea + '\'' +
42 | '}';
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/enums/CityEnum.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.enums;
2 |
3 | /**
4 | * @author minnan
5 | * @date 2021/1/27-18:17
6 | */
7 | public enum CityEnum {
8 | CITY_ENUM1(101010100,"北京"),CITY_ENUM2(101020100,"上海"),
9 | CITY_ENUM3(101280100,"广州"),CITY_ENUM4(101280600,"深圳"),
10 | CITY_ENUM5(101210100,"杭州"),CITY_ENUM6(101030100,"天津"),
11 | CITY_ENUM7(101110100,"西安"),CITY_ENUM8(101190400,"苏州"),
12 | CITY_ENUM9(101200100,"武汉"),CITY_ENUM10(101230200,"厦门"),
13 | CITY_ENUM11(101250100,"长沙"),CITY_ENUM12(101270100,"成都"),
14 | CITY_ENUM13(101180100,"郑州"),CITY_ENUM14(101040100,"重庆"),
15 | CITY_ENUM15(101230100,"福州"),CITY_ENUM16(101260100,"贵阳"),
16 | CITY_ENUM17(101300500,"桂林"),CITY_ENUM18(101280800,"佛山"),
17 | CITY_ENUM19(101230600,"漳州");
18 | private String name;
19 | private Integer code;
20 | CityEnum(Integer code,String name){this.code=code;this.name=name;}
21 | public static Integer getCode(String name){
22 | for (CityEnum cityEnum:CityEnum.values()){
23 | if (cityEnum.getName().equals(name)){
24 | return cityEnum.code;
25 | }
26 | }
27 | return null;
28 | }
29 | public String getName() { return name; }
30 |
31 | public void setName(String name) {
32 | this.name = name;
33 | }
34 |
35 | public Integer getCode() {
36 | return code;
37 | }
38 |
39 | public void setCode(Integer code) {
40 | this.code = code;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/enums/SalaryEnum.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.enums;
2 |
3 | /**
4 | * @author minnan
5 | * @date 2021/1/27-19:20
6 | */
7 | public enum SalaryEnum {
8 | SALARY_ENUM1("sel-salary-1","3K以下"),SALARY_ENUM2("sel-salary-2","3-5K"),
9 | SALARY_ENUM3("sel-salary-3","5-10K"),SALARY_ENUM4("sel-salary-4","10-15K"),
10 | SALARY_ENUM5("sel-salary-5","15-20K"),SALARY_ENUM6("sel-salary-6","20-30K");
11 | private String salaryCode;
12 | private String SalaryName;
13 | SalaryEnum(String salaryCode,String salaryName){this.salaryCode=salaryCode;this.SalaryName=salaryName;}
14 | public static String getName(String salaryName){
15 | for (SalaryEnum salaryEnum:SalaryEnum.values()){
16 | if (salaryEnum.getSalaryName().equals(salaryName)){
17 | return salaryEnum.salaryCode;
18 | }
19 | }
20 | return null;
21 | }
22 | public String getSalaryCode() {
23 | return salaryCode;
24 | }
25 |
26 | public void setSalaryCode(String salaryCode) {
27 | this.salaryCode = salaryCode;
28 | }
29 |
30 | public String getSalaryName() {
31 | return SalaryName;
32 | }
33 |
34 | public void setSalaryName(String salaryName) {
35 | SalaryName = salaryName;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/mongodb/InsertPositionMongo.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.mongodb;
2 |
3 | import com.boss.spider.position.entity.EnchartsSalary;
4 | import com.boss.spider.position.entity.Position;
5 | import com.boss.spider.position.service.PositionService;
6 | import org.springframework.beans.factory.annotation.Autowired;
7 | import org.springframework.data.domain.Example;
8 | import org.springframework.data.domain.ExampleMatcher;
9 | import org.springframework.data.mongodb.core.MongoTemplate;
10 | import org.springframework.data.mongodb.core.query.Criteria;
11 | import org.springframework.data.mongodb.core.query.Query;
12 | import org.springframework.stereotype.Component;
13 |
14 | import java.util.ArrayList;
15 | import java.util.HashSet;
16 | import java.util.List;
17 | import java.util.Set;
18 | import java.util.concurrent.atomic.AtomicReference;
19 |
20 | /**
21 | * @author minnan
22 | * @date 2021/1/28-19:28
23 | */
24 | @Component
25 | public class InsertPositionMongo {
26 | // @Autowired
27 | // private MongoTemplate mongoTemplate;
28 | @Autowired
29 | private PositionService positionService;
30 | // public void addPosition(Position positionEntity){
31 | // if (!mongoTemplate.collectionExists("position")) {
32 | // mongoTemplate.createCollection("position");
33 | // }
34 | // mongoTemplate.insert(positionEntity);
35 | // }
36 | public List mysqlFindCity(String keyWord){
37 | System.out.println(positionService);
38 | List positions= positionService.findPositionLikeByTitle(keyWord);
39 | List cityS=new ArrayList<>();
40 | for (Position pos:positions){
41 | cityS.add(pos.getPositionCity());
42 | }
43 | Set filer=new HashSet<>();
44 | for (String city:cityS){
45 | filer.add(city);
46 | }
47 | cityS.removeAll(cityS);
48 | cityS.addAll(filer);
49 | return cityS;
50 | }
51 | public EnchartsSalary mysqlFindPositionByKeyWordAndCity(Position position){
52 | List positions = positionService.findPositionLikeByCity(position);
53 | if (positions==null||positions.size()==0){
54 | return null;
55 | }
56 | System.out.println("=======================================");
57 | List filter=new ArrayList<>();
58 | for (Position pos:positions){
59 | if (pos.getPositionSalaryRange().contains("K")) {
60 | if (pos.getPositionSalaryRange().contains("·"))
61 | pos.setPositionSalaryRange(pos.getPositionSalaryRange().substring(0,
62 | pos.getPositionSalaryRange().indexOf("·")));
63 | filter.add(pos);
64 | }
65 | }
66 | AtomicReference salary= new AtomicReference<>((double) 0);
67 | filter.forEach((position1)->{
68 | String low=position1.getPositionSalaryRange().substring(0, position1.getPositionSalaryRange().indexOf("-"));
69 | String up=position1.getPositionSalaryRange().substring(position1.getPositionSalaryRange().indexOf("-")+1,
70 | position1.getPositionSalaryRange().indexOf("K"));
71 | salary.updateAndGet(v -> new Double(v + (double) (Integer.valueOf(low) + Integer.valueOf(up)) * 1.0 / 2 * 1000));
72 | });
73 | System.out.println(salary);
74 | return new EnchartsSalary(position.getPositionCity(), String.valueOf((int)(salary.get() /filter.size())));
75 | }
76 | // public List findCity(String keyWord){
77 | // Query query=new Query();
78 | // query.addCriteria(Criteria.where("positionTitle").regex(keyWord));
79 | // List positions=mongoTemplate.find(query, Position.class, "position");
80 | // List cityS=new ArrayList<>();
81 | // for (Position pos:positions){
82 | // cityS.add(pos.getPositionCity());
83 | // }
84 | // Set filer=new HashSet<>();
85 | // for (String city:cityS){
86 | // filer.add(city);
87 | // }
88 | // cityS.removeAll(cityS);
89 | // cityS.addAll(filer);
90 | // return cityS;
91 | // }
92 | // public EnchartsSalary findPositionByKeyWordAndCity(String keyWord, String city){
93 | // Query query=new Query();
94 | // query.addCriteria(Criteria.where("positionTitle").regex(keyWord));
95 | // query.addCriteria(Criteria.where("positionCity").is(city));
96 | // List positions=mongoTemplate.find(query, Position.class, "position");
97 | // for (Position position:positions){
98 | // System.out.println(position);
99 | // }
100 | // System.out.println("=======================================");
101 | // List filter=new ArrayList<>();
102 | // for (Position position:positions){
103 | // if (position.getPositionSalaryRange().contains("K")) {
104 | // if (position.getPositionSalaryRange().contains("·"))
105 | // position.setPositionSalaryRange(position.getPositionSalaryRange().substring(0,
106 | // position.getPositionSalaryRange().indexOf("·")));
107 | // filter.add(position);
108 | // }
109 | // }
110 | // AtomicReference salary= new AtomicReference<>((double) 0);
111 | // filter.forEach((position)->{
112 | // String low=position.getPositionSalaryRange().substring(0, position.getPositionSalaryRange().indexOf("-"));
113 | // String up=position.getPositionSalaryRange().substring(position.getPositionSalaryRange().indexOf("-")+1,
114 | // position.getPositionSalaryRange().indexOf("K"));
115 | // salary.updateAndGet(v -> new Double((double) (v + (double) (Integer.valueOf(low) + Integer.valueOf(up)) * 1.0 / 2 * 1000)));
116 | // });
117 | // return new EnchartsSalary(city, String.valueOf((int)(salary.get() /filter.size())));
118 | // }
119 |
120 | }
121 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/service/HotWordService.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.service;
2 |
3 | import com.boss.spider.position.entity.HotWord;
4 |
5 | import java.util.List;
6 |
7 | /**
8 | * @author minnan
9 | * @date 2021/1/23-20:18
10 | */
11 | public interface HotWordService {
12 | //插入热词
13 | int insertHotWordService(HotWord hotWord);
14 | //查询出所有热词
15 | List findHotWordService();
16 | //根据id删除热词
17 | int deleteHotWordService(Integer id);
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/service/InsertCookiesService.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.service;
2 |
3 | import com.boss.spider.position.entity.Cookies;
4 |
5 | import java.util.List;
6 |
7 | /**
8 | * @author minnan
9 | * @date 2021/1/19-18:48
10 | */
11 | public interface InsertCookiesService {
12 | int insertCookiesByTXT();
13 | List findALL();
14 | int DeleteById(Integer id);
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/service/PositionService.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.service;
2 |
3 | import com.boss.spider.position.entity.Position;
4 |
5 | import java.util.List;
6 |
7 | /**
8 | * @author minnan
9 | * @date 2021/1/23-20:47
10 | */
11 | public interface PositionService {
12 | //插入抓取的职位信息
13 | int insertPositionService(Position position);
14 | //模糊查询:根据自己的标题进行模糊查询
15 | List findPositionLikeByTitle(String keyWord);
16 | List findPositionLikeByCity(Position position);
17 | List findPositionForPoint(Position position);
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/service/SalaryViewService.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.service;
2 |
3 | import com.boss.spider.position.entity.SalaryView;
4 |
5 | import java.util.List;
6 |
7 | /**
8 | * @author minnan
9 | * @date 2021/1/23-20:36
10 | */
11 | public interface SalaryViewService {
12 | //插入工资视图
13 | int insertSalaryViewService(SalaryView salaryView);
14 | //查询工资视图
15 | List findSalaryViewALL();
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/service/impl/HotWordServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.service.impl;
2 |
3 | import com.boss.spider.position.dao.HotWordMapper;
4 | import com.boss.spider.position.entity.HotWord;
5 | import com.boss.spider.position.service.HotWordService;
6 | import org.springframework.beans.factory.annotation.Autowired;
7 | import org.springframework.stereotype.Service;
8 |
9 | import java.util.List;
10 |
11 | /**
12 | * @author minnan
13 | * @date 2021/1/23-20:21
14 | */
15 | @Service
16 | public class HotWordServiceImpl implements HotWordService {
17 |
18 | @Autowired
19 | private HotWordMapper hotWordMapper;
20 | @Override
21 | public int insertHotWordService(HotWord hotWord) {
22 | if (hotWord!=null&&hotWord.getHotWord()!=null){
23 | try {
24 | int effectROW=hotWordMapper.insertHotWord(hotWord);
25 | if(effectROW>0){
26 | System.out.println("成功插入热词数据条数:"+effectROW+" 条");
27 | return 1;
28 | }
29 | System.out.println("插入失败:请检查热词数据是否符合规范");
30 | return -1;
31 | }catch (Exception e){
32 | System.out.println("hotWord插入出错:"+e.getMessage());
33 | }
34 | }
35 | return -1;
36 | }
37 |
38 | @Override
39 | public List findHotWordService() {
40 | //获取查询结果
41 | try {
42 | List result=hotWordMapper.findHotWordALL();
43 | if (result!=null&&result.size()>0){
44 | System.out.println("成功查询到数据条数:"+result.size());
45 | return result;
46 | }
47 | System.out.println("插入失败:数据库获取无数据");
48 | return null;
49 | }catch (Exception e){
50 | System.out.println("插入失败:"+e.getMessage());
51 | return null;
52 | }
53 | }
54 |
55 | @Override
56 | public int deleteHotWordService(Integer id) {
57 | if (id!=null&&!id.equals("")){
58 | try {
59 | int effectROW=hotWordMapper.deleteHotWordById(id);
60 | if(effectROW>0){
61 | System.out.println("成功删除热词数据条数:"+effectROW+" 条");
62 | return 1;
63 | }
64 | System.out.println("插入失败:请检查id是否符合规范");
65 | return -1;
66 | }catch (Exception e){
67 | System.out.println("hotWord插入出错:"+e.getMessage());
68 | }
69 | }
70 | return -1;
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/service/impl/InsertCookiesServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.service.impl;
2 |
3 | import com.boss.spider.position.dao.CookiesMapper;
4 | import com.boss.spider.position.entity.Cookies;
5 | import com.boss.spider.position.service.InsertCookiesService;
6 | import org.springframework.beans.factory.annotation.Autowired;
7 | import org.springframework.stereotype.Service;
8 |
9 | import java.io.BufferedReader;
10 | import java.io.FileInputStream;
11 | import java.io.InputStream;
12 | import java.io.InputStreamReader;
13 | import java.net.URLEncoder;
14 | import java.util.List;
15 |
16 | /**
17 | * @author minnan
18 | * @date 2021/1/19-18:50
19 | */
20 | @Service
21 | public class InsertCookiesServiceImpl implements InsertCookiesService {
22 | @Autowired
23 | private CookiesMapper cookiesMapper;
24 | @Override
25 | public int insertCookiesByTXT() {
26 | InputStream is=null;
27 | BufferedReader reader=null;
28 | int effectRow=0;
29 | try {
30 | is= new FileInputStream("E:\\360MoveData\\Users\\jj\\Desktop\\code.txt");
31 | Cookies cookies=new Cookies();
32 | reader =new BufferedReader(new InputStreamReader(is));
33 | String str=null;
34 | while (true){
35 | str=reader.readLine();
36 | if (str!=null){
37 | cookies.setCookieValue(str);
38 | effectRow=cookiesMapper.insertCookies(cookies);
39 | }else
40 | break;
41 | }
42 |
43 | }catch (Exception e){
44 |
45 | }finally {
46 | try {
47 | if (is!=null)
48 | is.close();
49 | if (reader!=null)
50 | reader.close();
51 | }catch (Exception e){}
52 | }
53 | return effectRow;
54 | }
55 |
56 | @Override
57 | public List findALL() {
58 | return cookiesMapper.findALL();
59 | }
60 |
61 | @Override
62 | public int DeleteById(Integer id) {
63 | return cookiesMapper.DeleteCookie(id);
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/service/impl/PositionServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.service.impl;
2 |
3 | import com.boss.spider.position.dao.PositionMapper;
4 | import com.boss.spider.position.entity.Position;
5 | import com.boss.spider.position.service.PositionService;
6 | import org.springframework.beans.factory.annotation.Autowired;
7 | import org.springframework.stereotype.Service;
8 |
9 | import java.util.List;
10 |
11 | /**
12 | * @author minnan
13 | * @date 2021/1/23-20:56
14 | */
15 | @Service
16 | public class PositionServiceImpl implements PositionService {
17 | @Autowired
18 | private PositionMapper positionMapper;
19 | @Override
20 | public int insertPositionService(Position position) {
21 | if (position!=null&&!position.getPositionTitle().equals("")){
22 | try {
23 | int effectROW=positionMapper.insertPosition(position);
24 | if(effectROW>0){
25 | System.out.println("成功插入职位爬取数据条数:"+effectROW+" 条");
26 | return 1;
27 | }
28 | System.out.println("插入失败:请检查职位数据是否符合规范");
29 | return -1;
30 | }catch (Exception e){
31 | System.out.println("Position插入出错:"+e.getMessage());
32 | return -1;
33 | }
34 | }
35 | return 0;
36 | }
37 |
38 | @Override
39 | public List findPositionLikeByTitle(String keyWord) {
40 | //keyWord的非空判断
41 | try {
42 | if (keyWord!=null&&!keyWord.equals("")){
43 | List result=positionMapper.findPositionLike(keyWord);
44 | if (result!=null&&result.size()>0){
45 | System.out.println("查询爬取职位成功,共查取到:"+result.size());
46 | return result;
47 | }
48 | System.out.println("查询爬取职位失败:未拥有该信息或keyWord出错!");
49 | return null;
50 | }
51 | }catch (Exception e){
52 | System.out.println("查询职位爬取出错:"+e.getMessage());
53 | }
54 | return null;
55 | }
56 |
57 | @Override
58 | public List findPositionLikeByCity(Position position) {
59 | //keyWord的非空判断
60 | try {
61 | if (position!=null){
62 | List result=positionMapper.findPositionLikeCity(position);
63 | if (result!=null&&result.size()>0){
64 | System.out.println("查询爬取职位成功,共查取到:"+result.size());
65 | return result;
66 | }
67 | System.out.println("查询爬取职位失败:未拥有该信息或keyWord出错!");
68 | return null;
69 | }
70 | }catch (Exception e){
71 | System.out.println("查询职位爬取出错:"+e.getMessage());
72 | }
73 | return null;
74 | }
75 |
76 | @Override
77 | public List findPositionForPoint(Position position) {
78 | //keyWord的非空判断
79 | try {
80 | if (position!=null){
81 | List result=positionMapper.findPositionForPoint(position);
82 | if (result!=null&&result.size()>0){
83 | System.out.println("查询职位成功,共查取到:"+result.size());
84 | return result;
85 | }
86 | System.out.println("查询职位失败:未拥有该信息或keyWord出错!");
87 | return null;
88 | }
89 | }catch (Exception e){
90 | System.out.println("查询出错:"+e.getMessage());
91 | }
92 | return null;
93 | }
94 | }
95 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/service/impl/SalaryViewServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.service.impl;
2 |
3 | import com.boss.spider.position.dao.SalaryViewMapper;
4 | import com.boss.spider.position.entity.HotWord;
5 | import com.boss.spider.position.entity.SalaryView;
6 | import com.boss.spider.position.service.SalaryViewService;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.stereotype.Service;
9 |
10 | import java.util.List;
11 |
12 | /**
13 | * @author minnan
14 | * @date 2021/1/23-20:39
15 | */
16 | @Service
17 | public class SalaryViewServiceImpl implements SalaryViewService {
18 | @Autowired
19 | private SalaryViewMapper salaryViewMapper;
20 | @Override
21 | public int insertSalaryViewService(SalaryView salaryView) {
22 | if (salaryView!=null&&!salaryView.getSalaryvAvgrange().equals("")){
23 | try {
24 | int effectROW=salaryViewMapper.insertSalaryView(salaryView);
25 | if(effectROW>0){
26 | System.out.println("成功插入工资视图数据条数:"+effectROW+" 条");
27 | return 1;
28 | }
29 | System.out.println("插入失败:请检查工资视图数据是否符合规范");
30 | return -1;
31 | }catch (Exception e){
32 | System.out.println("salaryView插入出错:"+e.getMessage());
33 | return -1;
34 | }
35 | }
36 | return 0;
37 | }
38 |
39 | @Override
40 | public List findSalaryViewALL() {
41 | //获取查询结果
42 | try {
43 | List result=salaryViewMapper.findALL();
44 | if (result!=null&&result.size()>0){
45 | System.out.println("成功查询到工资视图数据条数:"+result.size());
46 | return result;
47 | }
48 | System.out.println("插入失败:数据库未获取工资视图数据");
49 | return null;
50 | }catch (Exception e){
51 | System.out.println("插入失败:"+e.getMessage());
52 | return null;
53 | }
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/utils/BossPositionHandlerPositionUtil.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.utils;
2 |
3 | import com.boss.spider.position.entity.Cookies;
4 | import com.boss.spider.position.entity.Position;
5 | import org.apache.http.Header;
6 | import org.apache.http.HttpEntity;
7 | import org.apache.http.HttpHost;
8 | import org.apache.http.NameValuePair;
9 | import org.apache.http.client.methods.CloseableHttpResponse;
10 | import org.apache.http.client.methods.HttpGet;
11 | import org.apache.http.client.utils.URIBuilder;
12 | import org.apache.http.impl.client.CloseableHttpClient;
13 | import org.apache.http.impl.client.HttpClientBuilder;
14 | import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
15 | import org.apache.http.message.BasicHeader;
16 | import org.apache.http.util.EntityUtils;
17 | import org.jsoup.Jsoup;
18 | import org.jsoup.nodes.Document;
19 | import org.jsoup.nodes.Element;
20 | import org.jsoup.select.Elements;
21 | import org.openqa.selenium.Cookie;
22 | import org.openqa.selenium.WebDriver;
23 | import org.openqa.selenium.chrome.ChromeDriver;
24 |
25 | import java.io.Closeable;
26 | import java.io.IOException;
27 | import java.util.*;
28 |
29 | /**
30 | * @author minnan
31 | * @date 2021/1/13-15:13
32 | */
33 | public class BossPositionHandlerPositionUtil {
34 | private final static String[] _ZP_STOKENS={'传入登录cookie信息'};//美国号 871
35 | //Http工具类日志
36 | private static Map log=new HashMap<>();
37 | //Client连接池数量
38 | private static PoolingHttpClientConnectionManager manager=null;
39 | static {
40 | //防止资源反复销毁及创建,使用连接池的方式进行管理
41 | manager=new PoolingHttpClientConnectionManager();
42 | manager.setMaxTotal(100);//连接池总数;
43 | manager.setDefaultMaxPerRoute(10);//每个页面最多分配数
44 | }
45 |
46 | /**
47 | * @param uri 页面请求地址
48 | * @param params 页面请求参数
49 | * @param headers 页面请求headers
50 | * @return
51 | */
52 | //get方式获取Entity
53 | public static HttpEntity httpGetHtml(String uri,List params,List headers) {
54 | CloseableHttpResponse response=null;
55 | try {
56 | CloseableHttpClient httpClient= HttpClientBuilder.create().setConnectionManager(manager)
57 | .build();
58 | URIBuilder uriBuilder=new URIBuilder(uri);
59 | if (params!=null){
60 | uriBuilder.addParameters(params);
61 | }
62 | //构建GET请求
63 | HttpGet request= new HttpGet(uriBuilder.build());
64 | for (Header header:headers) {
65 | request.setHeader(header);
66 | }
67 | //添加GET请求Header信息
68 | response= httpClient.execute(request);
69 | System.out.println(response.getStatusLine().getStatusCode());
70 | HttpEntity entity=response.getEntity();
71 | return entity;
72 | } catch (Exception e) {
73 | log.put("Request_GET","GET请求发生异常");
74 | e.printStackTrace();
75 | return null;
76 | }
77 | }
78 | //CloseStream
79 | public static void closeStream(List resources){
80 | try{
81 | for (Closeable resource:resources) {
82 | resource.close();
83 | }
84 | log.put("closeStream", "流关闭成功");
85 | }catch (Exception e){
86 | log.put("closeStream", "流关闭异常");
87 | }
88 | }
89 | //获取positionTitle
90 | public static String getPositionTitle(Element element){
91 | return element.getElementsByClass("job-name").first().getElementsByTag("a").first().text();
92 | }
93 | //获取职位的链接信息
94 | public static String getPositionLink(Element element) {
95 | return "https://www.zhipin.com"+element.getElementsByClass("job-name").first().getElementsByTag("a").first().attr("href");
96 | }
97 | //获取岗位薪资
98 | public static String getPositionSalaryRange(Element element) {
99 | return element.getElementsByClass("job-limit clearfix").first().child(0).text();
100 | }
101 | //岗位需求
102 | public static String getPositionRequire(String html) throws IOException {
103 | Document document=Jsoup.parse(html);
104 | if (html.contains("job-sec")) {
105 | Elements elementsParent = document.getElementsByClass("job-sec").first().children();
106 | String positionRequire = elementsParent.get(1).text();
107 | return positionRequire;
108 | }
109 | return "";
110 | }
111 | //岗位需求
112 | public static String getPositionCompanySIZE(String html) throws IOException {
113 | //获取document实例
114 | Document document=Jsoup.parse(html);
115 | //得到元素
116 | if (document.getElementsByClass("sider-company").isEmpty()){
117 | return "";
118 | }
119 | Elements elementsParent =document.getElementsByClass("sider-company").first().getElementsByTag("p");
120 | return elementsParent.get(2).text();
121 | }
122 | //成立时间
123 | public static String getPositionBuildTime(String html) {
124 | Document document=Jsoup.parse(html);
125 | Elements elementsParent =document.getElementsByClass("res-time");
126 | return elementsParent.text().replaceAll("成立时间:", "");
127 | }
128 | //所在地区
129 | public static String getPositionArea(String html){
130 | Document document=Jsoup.parse(html);
131 | Elements elementsParent =document.getElementsByClass("location-address");
132 | return elementsParent.text();
133 | }
134 | //公司名称
135 | public static String getCompanyName(String html){
136 | Document document=Jsoup.parse(html);
137 | Elements elementsParent =document.getElementsByClass("job-sec");
138 | if(elementsParent.size()<4)
139 | return "";
140 | return elementsParent.get(3).getElementsByClass("name").text();
141 | }
142 | /**
143 | * @param html html
144 | * @param selectClass 需要进行循环获取的根标签类属性
145 | * @return
146 | */
147 | //获取总div标签
148 | public static Elements getFirstElements(String html,String selectClass){
149 | Document document=Jsoup.parse(html);
150 | return document.getElementsByClass(selectClass);
151 | }
152 | //获取子div中title,link,薪资,要求,公司规模,成立时间,每日工作时间,创建时间
153 | public static List getPosition(Elements elements,List cookies,String city,int nums) throws Exception {
154 | List positions=new ArrayList<>();
155 | List headers=new ArrayList<>();
156 | headers.add(new BasicHeader("user-agent", "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/84.0"));
157 | for(int i=0;i AvgSalaryByArea(String keyWord){
22 | System.out.println(insertPositionMongo);
23 | List enchartsSalary=new ArrayList<>();
24 | if (keyWord!=null){
25 | //根据关键词获取当前岗位中不为空的地区
26 | List _cityAll=insertPositionMongo.mysqlFindCity(keyWord);
27 | Position position=new Position();
28 | position.setPositionTitle(keyWord);
29 | if(_cityAll!=null&&_cityAll.size()>0){
30 | for (String city:_cityAll) {
31 | position.setPositionCity(city);
32 | EnchartsSalary enchartsSalary1= insertPositionMongo.mysqlFindPositionByKeyWordAndCity(position);
33 | if (enchartsSalary1!=null)
34 | enchartsSalary.add(enchartsSalary1);
35 | }
36 | return enchartsSalary;
37 | }
38 | }
39 | return null;
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/java/com/boss/spider/position/utils/jsCookieUtil.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position.utils;
2 |
3 | /**
4 | * @author minnan
5 | * @date 2021/2/7-20:01
6 | * 用于在前端terminal使用
7 | */
8 | public class jsCookieUtil {
9 | String js="for(var j=0;j<300;j++){var str=encodeURIComponent((new t).z(e, parseInt(i)));if(str.length>=155) console.log(str)}";
10 | }
11 |
--------------------------------------------------------------------------------
/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | server.port=18098
2 | server.servlet.session.timeout=40m
3 | server.servlet.encoding.charset=utf-8
4 | server.tomcat.threads.max=500
5 | server.tomcat.basedir=/src/main/log
6 | spring.profiles.active=dev
7 | spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
8 | spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
9 | spring.datasource.url=jdbc:mysql://127.0.0.1:3306/boss?useUnicode=true&characterEncoding=utf-8&useSSL=false&maxReconnects=4
10 | spring.datasource.tomcat.init-s-q-l=SET NAMES utf8mb4 COLLATE utf8mb4_0900_ai_ci
11 | spring.datasource.username=boss
12 | spring.datasource.password=5201314love
13 | spring.thymeleaf.cache=true
14 | spring.thymeleaf.check-template=true
15 | spring.thymeleaf.encoding=UTF-8
16 | spring.thymeleaf.servlet.content-type=text/html; charset=utf-8
17 | spring.thymeleaf.check-template-location=true
18 | spring.thymeleaf.prefix=classpath:/templates/
19 | spring.thymeleaf.suffix=.html
20 | spring.mvc.static-path-pattern=/static/**
21 | spring.resources.static-locations=classpath:/static/
22 | spring.data.mongodb.authentication-database=admin
23 | spring.data.mongodb.database=boss
24 | spring.data.mongodb.host=192.168.182.129
25 | spring.data.mongodb.port=27017
26 | spring.data.mongodb.username=zjmx
27 | spring.data.mongodb.password=123456
28 | mybatis.configuration.map-underscore-to-camel-case=true
29 | logging.level.com=trace
30 | pagehelper.helperDialect=mysql
31 | pagehelper.reasonable=true
32 | pagehelper.supportMethodsArguments=true
33 | pagehelper.params= count=countSql
34 | spring.servlet.multipart.max-request-size=10MB
35 | spring.servlet.multipart.max-file-size=10MB
--------------------------------------------------------------------------------
/src/main/resources/static/PageJs/commons.js:
--------------------------------------------------------------------------------
1 | Date.prototype.format = function(fmt) {
2 | var o = {
3 | "M+" : this.getMonth()+1, //月份
4 | "d+" : this.getDate(), //日
5 | "h+" : this.getHours(), //小时
6 | "m+" : this.getMinutes(), //分
7 | "s+" : this.getSeconds(), //秒
8 | "q+" : Math.floor((this.getMonth()+3)/3), //季度
9 | "S" : this.getMilliseconds() //毫秒
10 | };
11 | if(/(y+)/.test(fmt)) {
12 | fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
13 | }
14 | for(var k in o) {
15 | if(new RegExp("("+ k +")").test(fmt)){
16 | fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
17 | }
18 | }
19 | return fmt;
20 | }
--------------------------------------------------------------------------------
/src/main/resources/static/PageJs/commons.min.js:
--------------------------------------------------------------------------------
1 | Date.prototype.format=function(a){var c={"M+":this.getMonth()+1,"d+":this.getDate(),"h+":this.getHours(),"m+":this.getMinutes(),"s+":this.getSeconds(),"q+":Math.floor((this.getMonth()+3)/3),S:this.getMilliseconds()};if(/(y+)/.test(a)){a=a.replace(RegExp.$1,(this.getFullYear()+"").substr(4-RegExp.$1.length))}for(var b in c){if(new RegExp("("+b+")").test(a)){a=a.replace(RegExp.$1,(RegExp.$1.length==1)?(c[b]):(("00"+c[b]).substr((""+c[b]).length)))}}return a};
--------------------------------------------------------------------------------
/src/main/resources/static/css/jqcloud.css:
--------------------------------------------------------------------------------
1 | div.jqcloud {
2 | font-family: Helvetica,Arial,sans-serif;
3 | font-size: 10px;
4 | line-height: normal
5 | }
6 |
7 | div.jqcloud a {
8 | font-size: inherit;
9 | text-decoration: none
10 | }
11 |
12 | div.jqcloud span.w10 {
13 | font-size: 550%
14 | }
15 |
16 | div.jqcloud span.w9 {
17 | font-size: 500%
18 | }
19 |
20 | div.jqcloud span.w8 {
21 | font-size: 450%
22 | }
23 |
24 | div.jqcloud span.w7 {
25 | font-size: 400%
26 | }
27 |
28 | div.jqcloud span.w6 {
29 | font-size: 350%
30 | }
31 |
32 | div.jqcloud span.w5 {
33 | font-size: 300%
34 | }
35 |
36 | div.jqcloud span.w4 {
37 | font-size: 250%
38 | }
39 |
40 | div.jqcloud span.w3 {
41 | font-size: 200%
42 | }
43 |
44 | div.jqcloud span.w2 {
45 | font-size: 150%
46 | }
47 |
48 | div.jqcloud span.w1 {
49 | font-size: 100%
50 | }
51 |
52 | div.jqcloud {
53 | color: #09f
54 | }
55 |
56 | div.jqcloud a {
57 | color: inherit
58 | }
59 |
60 | div.jqcloud a:hover {
61 | color: #a1ff68
62 | }
63 |
64 | div.jqcloud a:hover {
65 | color: #94ff8f
66 | }
67 |
68 | div.jqcloud span.w10 {
69 | color: #dfa5b1
70 | }
71 |
72 | div.jqcloud span.w9 {
73 | color: #a42066
74 | }
75 |
76 | div.jqcloud span.w8 {
77 | color: #a5f4d4
78 | }
79 |
80 | div.jqcloud span.w7 {
81 | color: #ee434e
82 | }
83 |
84 | div.jqcloud span.w6 {
85 | color: #90c5f0
86 | }
87 |
88 | div.jqcloud span.w5 {
89 | color: #2f9cfd
90 | }
91 |
92 | div.jqcloud span.w4 {
93 | color: #ffdcc5
94 | }
95 |
96 | div.jqcloud span.w3 {
97 | color: #773164
98 | }
99 |
100 | div.jqcloud span.w2 {
101 | color: #ee434e
102 | }
103 |
104 | div.jqcloud span.w1 {
105 | color: #8e4c7d
106 | }
107 |
108 | div.jqcloud {
109 | overflow: hidden;
110 | position: relative
111 | }
112 |
113 | div.jqcloud span {
114 | padding: 0
115 | }
--------------------------------------------------------------------------------
/src/main/resources/static/css/jqcloud.min.css:
--------------------------------------------------------------------------------
1 | div.jqcloud{font-family:Helvetica,Arial,sans-serif;font-size:10px;line-height:normal}div.jqcloud a{font-size:inherit;text-decoration:none}div.jqcloud span.w10{font-size:550%}div.jqcloud span.w9{font-size:500%}div.jqcloud span.w8{font-size:450%}div.jqcloud span.w7{font-size:400%}div.jqcloud span.w6{font-size:350%}div.jqcloud span.w5{font-size:300%}div.jqcloud span.w4{font-size:250%}div.jqcloud span.w3{font-size:200%}div.jqcloud span.w2{font-size:150%}div.jqcloud span.w1{font-size:100%}div.jqcloud{color:#09f}div.jqcloud a{color:inherit}div.jqcloud a:hover{color:#a1ff68}div.jqcloud a:hover{color:#94ff8f}div.jqcloud span.w10{color:#dfa5b1}div.jqcloud span.w9{color:#a42066}div.jqcloud span.w8{color:#a5f4d4}div.jqcloud span.w7{color:#ee434e}div.jqcloud span.w6{color:#90c5f0}div.jqcloud span.w5{color:#2f9cfd}div.jqcloud span.w4{color:#ffdcc5}div.jqcloud span.w3{color:#773164}div.jqcloud span.w2{color:#ee434e}div.jqcloud span.w1{color:#8e4c7d}div.jqcloud{overflow:hidden;position:relative}div.jqcloud span{padding:0}
--------------------------------------------------------------------------------
/src/main/resources/static/images/content.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/images/content.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/images/index.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/images/index.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/images/logo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/images/logo.ico
--------------------------------------------------------------------------------
/src/main/resources/static/images/spider-man.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/images/spider-man.png
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/layui.mobile.css:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.7 MIT License */
2 | blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,legend,li,ol,p,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}html{font:12px 'Helvetica Neue','PingFang SC',STHeitiSC-Light,Helvetica,Arial,sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a,button,input{-webkit-tap-highlight-color:rgba(255,0,0,0)}a{text-decoration:none;background:0 0}a:active,a:hover{outline:0}table{border-collapse:collapse;border-spacing:0}li{list-style:none}b,strong{font-weight:700}h1,h2,h3,h4,h5,h6{font-weight:500}address,cite,dfn,em,var{font-style:normal}dfn{font-style:italic}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}img{border:0;vertical-align:bottom}.layui-inline,input,label{vertical-align:middle}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;outline:0}button,select{text-transform:none}select{-webkit-appearance:none;border:none}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=1.0.7);src:url(../font/iconfont.eot?v=1.0.7#iefix) format('embedded-opentype'),url(../font/iconfont.woff?v=1.0.7) format('woff'),url(../font/iconfont.ttf?v=1.0.7) format('truetype'),url(../font/iconfont.svg?v=1.0.7#iconfont) format('svg')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-box,.layui-box *{-webkit-box-sizing:content-box!important;-moz-box-sizing:content-box!important;box-sizing:content-box!important}.layui-border-box,.layui-border-box *{-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important}.layui-inline{position:relative;display:inline-block;*display:inline;*zoom:1}.layui-edge,.layui-upload-iframe{position:absolute;width:0;height:0}.layui-edge{border-style:dashed;border-color:transparent;overflow:hidden}.layui-elip{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-disabled,.layui-disabled:active{background-color:#d2d2d2!important;color:#fff!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}.layui-upload-iframe{border:0;visibility:hidden}.layui-upload-enter{border:1px solid #009E94;background-color:#009E94;color:#fff;-webkit-transform:scale(1.1);transform:scale(1.1)}@-webkit-keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.layui-m-anim-scale{animation-name:layui-m-anim-scale;-webkit-animation-name:layui-m-anim-scale}@-webkit-keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.layui-m-anim-up{-webkit-animation-name:layui-m-anim-up;animation-name:layui-m-anim-up}@-webkit-keyframes layui-m-anim-left{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes layui-m-anim-left{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.layui-m-anim-left{-webkit-animation-name:layui-m-anim-left;animation-name:layui-m-anim-left}@-webkit-keyframes layui-m-anim-right{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes layui-m-anim-right{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.layui-m-anim-right{-webkit-animation-name:layui-m-anim-right;animation-name:layui-m-anim-right}@-webkit-keyframes layui-m-anim-lout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@keyframes layui-m-anim-lout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}.layui-m-anim-lout{-webkit-animation-name:layui-m-anim-lout;animation-name:layui-m-anim-lout}@-webkit-keyframes layui-m-anim-rout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes layui-m-anim-rout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(100%);transform:translateX(100%)}}.layui-m-anim-rout{-webkit-animation-name:layui-m-anim-rout;animation-name:layui-m-anim-rout}.layui-m-layer{position:relative;z-index:19891014}.layui-m-layer *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.layui-m-layermain,.layui-m-layershade{position:fixed;left:0;top:0;width:100%;height:100%}.layui-m-layershade{background-color:rgba(0,0,0,.7);pointer-events:auto}.layui-m-layermain{display:table;font-family:Helvetica,arial,sans-serif;pointer-events:none}.layui-m-layermain .layui-m-layersection{display:table-cell;vertical-align:middle;text-align:center}.layui-m-layerchild{position:relative;display:inline-block;text-align:left;background-color:#fff;font-size:14px;border-radius:5px;box-shadow:0 0 8px rgba(0,0,0,.1);pointer-events:auto;-webkit-overflow-scrolling:touch;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}.layui-m-layer0 .layui-m-layerchild{width:90%;max-width:640px}.layui-m-layer1 .layui-m-layerchild{border:none;border-radius:0}.layui-m-layer2 .layui-m-layerchild{width:auto;max-width:260px;min-width:40px;border:none;background:0 0;box-shadow:none;color:#fff}.layui-m-layerchild h3{padding:0 10px;height:60px;line-height:60px;font-size:16px;font-weight:400;border-radius:5px 5px 0 0;text-align:center}.layui-m-layerbtn span,.layui-m-layerchild h3{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-m-layercont{padding:50px 30px;line-height:22px;text-align:center}.layui-m-layer1 .layui-m-layercont{padding:0;text-align:left}.layui-m-layer2 .layui-m-layercont{text-align:center;padding:0;line-height:0}.layui-m-layer2 .layui-m-layercont i{width:25px;height:25px;margin-left:8px;display:inline-block;background-color:#fff;border-radius:100%;-webkit-animation:layui-m-anim-loading 1.4s infinite ease-in-out;animation:layui-m-anim-loading 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-m-layerbtn,.layui-m-layerbtn span{position:relative;text-align:center;border-radius:0 0 5px 5px}.layui-m-layer2 .layui-m-layercont p{margin-top:20px}@-webkit-keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}@keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}.layui-m-layer2 .layui-m-layercont i:first-child{margin-left:0;-webkit-animation-delay:-.32s;animation-delay:-.32s}.layui-m-layer2 .layui-m-layercont i.layui-m-layerload{-webkit-animation-delay:-.16s;animation-delay:-.16s}.layui-m-layer2 .layui-m-layercont>div{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layui-m-layerbtn{display:box;display:-moz-box;display:-webkit-box;width:100%;height:50px;line-height:50px;font-size:0;border-top:1px solid #D0D0D0;background-color:#F2F2F2}.layui-m-layerbtn span{display:block;-moz-box-flex:1;box-flex:1;-webkit-box-flex:1;font-size:14px;cursor:pointer}.layui-m-layerbtn span[yes]{color:#40AFFE}.layui-m-layerbtn span[no]{border-right:1px solid #D0D0D0;border-radius:0 0 0 5px}.layui-m-layerbtn span:active{background-color:#F6F6F6}.layui-m-layerend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layui-m-layerend::after,.layui-m-layerend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layui-m-layerend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}body .layui-m-layer .layui-m-layer-footer{position:fixed;width:95%;max-width:100%;margin:0 auto;left:0;right:0;bottom:10px;background:0 0}.layui-m-layer-footer .layui-m-layercont{padding:20px;border-radius:5px 5px 0 0;background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn{display:block;height:auto;background:0 0;border-top:none}.layui-m-layer-footer .layui-m-layerbtn span{background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn span[no]{color:#FD482C;border-top:1px solid #c2c2c2;border-radius:0 0 5px 5px}.layui-m-layer-footer .layui-m-layerbtn span[yes]{margin-top:10px;border-radius:5px}body .layui-m-layer .layui-m-layer-msg{width:auto;max-width:90%;margin:0 auto;bottom:-150px;background-color:rgba(0,0,0,.7);color:#fff}.layui-m-layer-msg .layui-m-layercont{padding:10px 20px}
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/code.css:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.7 MIT License */
2 | html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none}
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/laydate/default/laydate.css:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.7 MIT License */
2 | .laydate-set-ym,.layui-laydate,.layui-laydate *,.layui-laydate-list{box-sizing:border-box}html #layuicss-laydate{display:none;position:absolute;width:1989px}.layui-laydate *{margin:0;padding:0}.layui-laydate{position:absolute;z-index:66666666;margin:5px 0;border-radius:2px;font-size:14px;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:laydate-upbit;animation-name:laydate-upbit}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}@-webkit-keyframes laydate-upbit{from{-webkit-transform:translate3d(0,20px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes laydate-upbit{from{transform:translate3d(0,20px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-laydate-static{position:relative;z-index:0;display:inline-block;margin:0;-webkit-animation:none;animation:none}.laydate-ym-show .laydate-next-m,.laydate-ym-show .laydate-prev-m{display:none!important}.laydate-ym-show .laydate-next-y,.laydate-ym-show .laydate-prev-y{display:inline-block!important}.laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-time-show .layui-laydate-header .layui-icon,.laydate-ym-show .laydate-set-ym span[lay-type=month]{display:none!important}.layui-laydate-header{position:relative;line-height:30px;padding:10px 70px 5px}.laydate-set-ym span,.layui-laydate-header i{padding:0 5px;cursor:pointer}.layui-laydate-header *{display:inline-block;vertical-align:bottom}.layui-laydate-header i{position:absolute;top:10px;color:#999;font-size:18px}.layui-laydate-header i.laydate-prev-y{left:15px}.layui-laydate-header i.laydate-prev-m{left:45px}.layui-laydate-header i.laydate-next-y{right:15px}.layui-laydate-header i.laydate-next-m{right:45px}.laydate-set-ym{width:100%;text-align:center;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.laydate-time-text{cursor:default!important}.layui-laydate-content{position:relative;padding:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content table{border-collapse:collapse;border-spacing:0}.layui-laydate-content td,.layui-laydate-content th{width:36px;height:30px;padding:5px;text-align:center}.layui-laydate-content td{position:relative;cursor:pointer}.laydate-day-mark{position:absolute;left:0;top:0;width:100%;height:100%;line-height:30px;font-size:12px;overflow:hidden}.laydate-day-mark::after{position:absolute;content:'';right:2px;top:2px;width:5px;height:5px;border-radius:50%}.layui-laydate-footer{position:relative;height:46px;line-height:26px;padding:10px 20px}.layui-laydate-footer span{margin-right:15px;display:inline-block;cursor:pointer;font-size:12px}.layui-laydate-footer span:hover{color:#5FB878}.laydate-footer-btns{position:absolute;right:10px;top:10px}.laydate-footer-btns span{height:26px;line-height:26px;margin:0 0 0 -1px;padding:0 10px;border:1px solid #C9C9C9;background-color:#fff;white-space:nowrap;vertical-align:top;border-radius:2px}.layui-laydate-list>li,.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle}.layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;background-color:#fff}.layui-laydate-list>li{position:relative;width:33.3%;height:36px;line-height:36px;margin:3px 0;text-align:center;cursor:pointer}.laydate-month-list>li{width:25%;margin:17px 0}.laydate-time-list>li{height:100%;margin:0;line-height:normal;cursor:default}.laydate-time-list p{position:relative;top:-4px;line-height:29px}.laydate-time-list ol{height:181px;overflow:hidden}.laydate-time-list>li:hover ol{overflow-y:auto}.laydate-time-list ol li{width:130%;padding-left:33px;line-height:30px;text-align:left;cursor:pointer}.layui-laydate-hint{position:absolute;top:115px;left:50%;width:250px;margin-left:-125px;line-height:20px;padding:15px;text-align:center;font-size:12px}.layui-laydate-range{width:546px}.layui-laydate-range .laydate-main-list-0 .laydate-next-m,.layui-laydate-range .laydate-main-list-0 .laydate-next-y,.layui-laydate-range .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range .laydate-main-list-1 .laydate-prev-y{display:none}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left:1px solid #e2e2e2}.layui-laydate,.layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);background-color:#fff;color:#666}.layui-laydate-header{border-bottom:1px solid #e2e2e2}.layui-laydate-header i:hover,.layui-laydate-header span:hover{color:#5FB878}.layui-laydate-content{border-top:none 0;border-bottom:none 0}.layui-laydate-content th{font-weight:400;color:#333}.layui-laydate-content td{color:#666}.layui-laydate-content td.laydate-selected{background-color:#00F7DE}.laydate-selected:hover{background-color:#00F7DE!important}.layui-laydate-content td:hover,.layui-laydate-list li:hover{background-color:#eaeaea;color:#333}.laydate-time-list li ol{margin:0;padding:0;border:1px solid #e2e2e2;border-left-width:0}.laydate-time-list li:first-child ol{border-left-width:1px}.laydate-time-list>li:hover{background:0 0}.layui-laydate-content .laydate-day-next,.layui-laydate-content .laydate-day-prev{color:#d2d2d2}.laydate-selected.laydate-day-next,.laydate-selected.laydate-day-prev{background-color:#f8f8f8!important}.layui-laydate-footer{border-top:1px solid #e2e2e2}.layui-laydate-hint{color:#FF5722}.laydate-day-mark::after{background-color:#5FB878}.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none}.layui-laydate-footer span[lay-type=date]{color:#5FB878}.layui-laydate .layui-this{background-color:#009688!important;color:#fff!important}.layui-laydate .laydate-disabled,.layui-laydate .laydate-disabled:hover{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.laydate-theme-molv{border:none}.laydate-theme-molv.layui-laydate-range{width:548px}.laydate-theme-molv .layui-laydate-main{width:274px}.laydate-theme-molv .layui-laydate-header{border:none;background-color:#009688}.laydate-theme-molv .layui-laydate-header i,.laydate-theme-molv .layui-laydate-header span{color:#f6f6f6}.laydate-theme-molv .layui-laydate-header i:hover,.laydate-theme-molv .layui-laydate-header span:hover{color:#fff}.laydate-theme-molv .layui-laydate-content{border:1px solid #e2e2e2;border-top:none;border-bottom:none}.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left:none}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li,.laydate-theme-grid .layui-laydate-content td,.laydate-theme-grid .layui-laydate-content thead,.laydate-theme-molv .layui-laydate-footer{border:1px solid #e2e2e2}.laydate-theme-grid .laydate-selected,.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#009688!important}.laydate-theme-grid .laydate-selected.laydate-day-next,.laydate-theme-grid .laydate-selected.laydate-day-prev{color:#d2d2d2!important}.laydate-theme-grid .laydate-month-list,.laydate-theme-grid .laydate-year-list{margin:1px 0 0 1px}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li{margin:0 -1px -1px 0}.laydate-theme-grid .laydate-year-list>li{height:43px;line-height:43px}.laydate-theme-grid .laydate-month-list>li{height:71px;line-height:71px}
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layer/default/icon-ext.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/css/modules/layer/default/icon-ext.png
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layer/default/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/css/modules/layer/default/icon.png
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layer/default/loading-0.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/css/modules/layer/default/loading-0.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layer/default/loading-1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/css/modules/layer/default/loading-1.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/css/modules/layer/default/loading-2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/css/modules/layer/default/loading-2.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/font/iconfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/font/iconfont.eot
--------------------------------------------------------------------------------
/src/main/resources/static/layui/font/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/font/iconfont.ttf
--------------------------------------------------------------------------------
/src/main/resources/static/layui/font/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/font/iconfont.woff
--------------------------------------------------------------------------------
/src/main/resources/static/layui/font/iconfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/font/iconfont.woff2
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/0.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/0.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/1.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/10.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/10.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/11.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/11.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/12.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/12.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/13.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/13.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/14.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/14.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/15.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/15.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/16.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/16.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/17.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/17.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/18.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/18.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/19.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/19.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/2.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/20.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/20.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/21.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/21.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/22.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/22.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/23.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/23.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/24.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/24.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/25.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/25.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/26.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/26.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/27.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/27.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/28.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/28.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/29.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/29.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/3.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/30.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/30.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/31.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/31.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/32.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/32.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/33.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/33.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/34.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/34.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/35.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/35.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/36.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/36.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/37.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/37.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/38.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/38.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/39.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/39.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/4.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/4.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/40.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/40.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/41.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/41.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/42.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/42.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/43.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/43.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/44.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/44.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/45.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/45.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/46.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/46.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/47.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/47.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/48.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/48.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/49.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/49.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/5.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/5.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/50.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/50.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/51.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/51.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/52.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/52.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/53.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/53.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/54.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/54.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/55.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/55.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/56.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/56.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/57.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/57.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/58.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/58.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/59.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/59.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/6.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/6.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/60.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/60.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/61.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/61.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/62.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/62.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/63.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/63.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/64.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/64.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/65.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/65.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/66.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/66.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/67.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/67.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/68.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/68.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/69.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/69.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/7.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/7.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/70.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/70.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/71.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/71.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/8.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/8.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/images/face/9.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lilymz/boss-SpringBoot/1df9b7aa25ac08735f3bb35dda1bacd7821d5c35/src/main/resources/static/layui/images/face/9.gif
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/carousel.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.7 MIT License */
2 | ;layui.define("jquery",function(e){"use strict";var i=layui.$,n=(layui.hint(),layui.device(),{config:{},set:function(e){var n=this;return n.config=i.extend({},n.config,e),n},on:function(e,i){return layui.onevent.call(this,t,e,i)}}),t="carousel",a="layui-this",l=">*[carousel-item]>*",o="layui-carousel-left",r="layui-carousel-right",d="layui-carousel-prev",s="layui-carousel-next",u="layui-carousel-arrow",c="layui-carousel-ind",m=function(e){var t=this;t.config=i.extend({},t.config,n.config,e),t.render()};m.prototype.config={width:"600px",height:"280px",full:!1,arrow:"hover",indicator:"inside",autoplay:!0,interval:3e3,anim:"",trigger:"click",index:0},m.prototype.render=function(){var e=this,n=e.config;n.elem=i(n.elem),n.elem[0]&&(e.elemItem=n.elem.find(l),n.index<0&&(n.index=0),n.index>=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr("lay-anim",n.anim),e.elemItem.eq(n.index).addClass(a),e.elemItem.length<=1||(e.indicator(),e.arrow(),e.autoplay(),e.events()))},m.prototype.reload=function(e){var n=this;clearInterval(n.timer),n.config=i.extend({},n.config,e),n.render()},m.prototype.prevIndex=function(){var e=this,i=e.config,n=i.index-1;return n<0&&(n=e.elemItem.length-1),n},m.prototype.nextIndex=function(){var e=this,i=e.config,n=i.index+1;return n>=e.elemItem.length&&(n=0),n},m.prototype.addIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index+e,n.index>=i.elemItem.length&&(n.index=0)},m.prototype.subIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index-e,n.index<0&&(n.index=i.elemItem.length-1)},m.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(clearInterval(e.timer),e.timer=setInterval(function(){e.slide()},i.interval))},m.prototype.arrow=function(){var e=this,n=e.config,t=i(['",'"].join(""));n.elem.attr("lay-arrow",n.arrow),n.elem.find("."+u)[0]&&n.elem.find("."+u).remove(),n.elem.append(t),t.on("click",function(){var n=i(this),t=n.attr("lay-type");e.slide(t)})},m.prototype.indicator=function(){var e=this,n=e.config,t=e.elemInd=i(['',function(){var i=[];return layui.each(e.elemItem,function(e){i.push("")}),i.join("")}(),"
"].join(""));n.elem.attr("lay-indicator",n.indicator),n.elem.find("."+c)[0]&&n.elem.find("."+c).remove(),n.elem.append(t),"updown"===n.anim&&t.css("margin-top",-(t.height()/2)),t.find("li").on("hover"===n.trigger?"mouseover":n.trigger,function(){var t=i(this),a=t.index();a>n.index?e.slide("add",a-n.index):a/g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('- '+o.replace(/[\r\t\n]+/g,"
- ")+"
"),c.find(">.layui-code-h3")[0]||c.prepend(''+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"
");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss");
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/element.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.7 MIT License */
2 | ;layui.define("jquery",function(t){"use strict";var a=layui.$,i=(layui.hint(),layui.device()),e="element",l="layui-this",n="layui-show",s=function(){this.config={}};s.prototype.set=function(t){var i=this;return a.extend(!0,i.config,t),i},s.prototype.on=function(t,a){return layui.onevent.call(this,e,t,a)},s.prototype.tabAdd=function(t,i){var e=".layui-tab-title",l=a(".layui-tab[lay-filter="+t+"]"),n=l.children(e),s=n.children(".layui-tab-bar"),o=l.children(".layui-tab-content"),r='"+(i.title||"unnaming")+"";return s[0]?s.before(r):n.append(r),o.append(''+(i.content||"")+"
"),f.hideTabMore(!0),f.tabAuto(),this},s.prototype.tabDelete=function(t,i){var e=".layui-tab-title",l=a(".layui-tab[lay-filter="+t+"]"),n=l.children(e),s=n.find('>li[lay-id="'+i+'"]');return f.tabDelete(null,s),this},s.prototype.tabChange=function(t,i){var e=".layui-tab-title",l=a(".layui-tab[lay-filter="+t+"]"),n=l.children(e),s=n.find('>li[lay-id="'+i+'"]');return f.tabClick.call(s[0],null,null,s),this},s.prototype.tab=function(t){t=t||{},b.on("click",t.headerElem,function(i){var e=a(this).index();f.tabClick.call(this,i,e,null,t)})},s.prototype.progress=function(t,i){var e="layui-progress",l=a("."+e+"[lay-filter="+t+"]"),n=l.find("."+e+"-bar"),s=n.find("."+e+"-text");return n.css("width",i),s.text(i),this};var o=".layui-nav",r="layui-nav-item",c="layui-nav-bar",u="layui-nav-tree",d="layui-nav-child",y="layui-nav-more",h="layui-anim layui-anim-upbit",f={tabClick:function(t,i,s,o){o=o||{};var r=s||a(this),i=i||r.parent().children("li").index(r),c=o.headerElem?r.parent():r.parents(".layui-tab").eq(0),u=o.bodyElem?a(o.bodyElem):c.children(".layui-tab-content").children(".layui-tab-item"),d=r.find("a"),y=c.attr("lay-filter");"javascript:;"!==d.attr("href")&&"_blank"===d.attr("target")||(r.addClass(l).siblings().removeClass(l),u.eq(i).addClass(n).siblings().removeClass(n)),layui.event.call(this,e,"tab("+y+")",{elem:c,index:i})},tabDelete:function(t,i){var n=i||a(this).parent(),s=n.index(),o=n.parents(".layui-tab").eq(0),r=o.children(".layui-tab-content").children(".layui-tab-item"),c=o.attr("lay-filter");n.hasClass(l)&&(n.next()[0]?f.tabClick.call(n.next()[0],null,s+1):n.prev()[0]&&f.tabClick.call(n.prev()[0],null,s-1)),n.remove(),r.eq(s).remove(),setTimeout(function(){f.tabAuto()},50),layui.event.call(this,e,"tabDelete("+c+")",{elem:o,index:s})},tabAuto:function(){var t="layui-tab-more",e="layui-tab-bar",l="layui-tab-close",n=this;a(".layui-tab").each(function(){var s=a(this),o=s.children(".layui-tab-title"),r=(s.children(".layui-tab-content").children(".layui-tab-item"),'lay-stope="tabmore"'),c=a('');if(n===window&&8!=i.ie&&f.hideTabMore(!0),s.attr("lay-allowClose")&&o.find("li").each(function(){var t=a(this);if(!t.find("."+l)[0]){var i=a('ဆ');i.on("click",f.tabDelete),t.append(i)}}),"string"!=typeof s.attr("lay-unauto"))if(o.prop("scrollWidth")>o.outerWidth()+1){if(o.find("."+e)[0])return;o.append(c),s.attr("overflow",""),c.on("click",function(a){o[this.title?"removeClass":"addClass"](t),this.title=this.title?"":"收缩"})}else o.find("."+e).remove(),s.removeAttr("overflow")})},hideTabMore:function(t){var i=a(".layui-tab-title");t!==!0&&"tabmore"===a(t.target).attr("lay-stope")||(i.removeClass("layui-tab-more"),i.find(".layui-tab-bar").attr("title",""))},clickThis:function(){var t=a(this),i=t.parents(o),n=i.attr("lay-filter"),s=t.parent(),c=t.siblings("."+d),y="string"==typeof s.attr("lay-unselect");"javascript:;"!==t.attr("href")&&"_blank"===t.attr("target")||y||c[0]||(i.find("."+l).removeClass(l),s.addClass(l)),i.hasClass(u)&&(c.removeClass(h),c[0]&&(s["none"===c.css("display")?"addClass":"removeClass"](r+"ed"),"all"===i.attr("lay-shrink")&&s.siblings().removeClass(r+"ed"))),layui.event.call(this,e,"nav("+n+")",t)},collapse:function(){var t=a(this),i=t.find(".layui-colla-icon"),l=t.siblings(".layui-colla-content"),s=t.parents(".layui-collapse").eq(0),o=s.attr("lay-filter"),r="none"===l.css("display");if("string"==typeof s.attr("lay-accordion")){var c=s.children(".layui-colla-item").children("."+n);c.siblings(".layui-colla-title").children(".layui-colla-icon").html(""),c.removeClass(n)}l[r?"addClass":"removeClass"](n),i.html(r?"":""),layui.event.call(this,e,"collapse("+o+")",{title:t,content:l,show:r})}};s.prototype.init=function(t,e){var l=function(){return e?'[lay-filter="'+e+'"]':""}(),s={tab:function(){f.tabAuto.call({})},nav:function(){var t=200,e={},s={},p={},b=function(l,o,r){var c=a(this),f=c.find("."+d);o.hasClass(u)?l.css({top:c.position().top,height:c.children("a").outerHeight(),opacity:1}):(f.addClass(h),l.css({left:c.position().left+parseFloat(c.css("marginLeft")),top:c.position().top+c.height()-l.height()}),e[r]=setTimeout(function(){l.css({width:c.width(),opacity:1})},i.ie&&i.ie<10?0:t),clearTimeout(p[r]),"block"===f.css("display")&&clearTimeout(s[r]),s[r]=setTimeout(function(){f.addClass(n),c.find("."+y).addClass(y+"d")},300))};a(o+l).each(function(i){var l=a(this),o=a(''),h=l.find("."+r);l.find("."+c)[0]||(l.append(o),h.on("mouseenter",function(){b.call(this,o,l,i)}).on("mouseleave",function(){l.hasClass(u)||(clearTimeout(s[i]),s[i]=setTimeout(function(){l.find("."+d).removeClass(n),l.find("."+y).removeClass(y+"d")},300))}),l.on("mouseleave",function(){clearTimeout(e[i]),p[i]=setTimeout(function(){l.hasClass(u)?o.css({height:0,top:o.position().top+o.height()/2,opacity:0}):o.css({width:0,left:o.position().left+o.width()/2,opacity:0})},t)})),h.find("a").each(function(){var t=a(this),i=(t.parent(),t.siblings("."+d));i[0]&&!t.children("."+y)[0]&&t.append(''),t.off("click",f.clickThis).on("click",f.clickThis)})})},breadcrumb:function(){var t=".layui-breadcrumb";a(t+l).each(function(){var t=a(this),i="lay-separator",e=t.attr(i)||"/",l=t.find("a");l.next("span["+i+"]")[0]||(l.each(function(t){t!==l.length-1&&a(this).after(""+e+"")}),t.css("visibility","visible"))})},progress:function(){var t="layui-progress";a("."+t+l).each(function(){var i=a(this),e=i.find(".layui-progress-bar"),l=e.attr("lay-percent");e.css("width",function(){return/^.+\/.+$/.test(l)?100*new Function("return "+l)()+"%":l}()),i.attr("lay-showPercent")&&setTimeout(function(){e.html(''+l+"")},350)})},collapse:function(){var t="layui-collapse";a("."+t+l).each(function(){var t=a(this).find(".layui-colla-item");t.each(function(){var t=a(this),i=t.find(".layui-colla-title"),e=t.find(".layui-colla-content"),l="none"===e.css("display");i.find(".layui-colla-icon").remove(),i.append(''+(l?"":"")+""),i.off("click",f.collapse).on("click",f.collapse)})})}};return s[t]?s[t]():layui.each(s,function(t,a){a()})},s.prototype.render=s.prototype.init;var p=new s,b=a(document);p.render();var v=".layui-tab-title li";b.on("click",v,f.tabClick),b.on("click",f.hideTabMore),a(window).on("resize",f.tabAuto),t(e,p)});
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/flow.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.7 MIT License */
2 | ;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="加载更多",h=l('");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),!i&&f.width()&&(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;su)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)});
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/form.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.7 MIT License */
2 | ;layui.define("layer",function(e){"use strict";var t=layui.$,i=layui.layer,a=layui.hint(),n=layui.device(),l="form",r=".layui-form",s="layui-this",o="layui-hide",c="layui-disabled",u=function(){this.config={verify:{required:[/[\S]+/,"必填项不能为空"],phone:[/^1\d{10}$/,"请输入正确的手机号"],email:[/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,"邮箱格式不正确"],url:[/(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/,"链接格式不正确"],number:function(e){if(!e||isNaN(e))return"只能填写数字"},date:[/^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/,"日期格式不正确"],identity:[/(^\d{15}$)|(^\d{17}(x|X|\d)$)/,"请输入正确的身份证号"]}}};u.prototype.set=function(e){var i=this;return t.extend(!0,i.config,e),i},u.prototype.verify=function(e){var i=this;return t.extend(!0,i.config.verify,e),i},u.prototype.on=function(e,t){return layui.onevent.call(this,l,e,t)},u.prototype.val=function(e,i){var a=this,n=t(r+'[lay-filter="'+e+'"]');return n.each(function(e,a){var n=t(this);layui.each(i,function(e,t){var i,a=n.find('[name="'+e+'"]');a[0]&&(i=a[0].type,"checkbox"===i?a[0].checked=t:"radio"===i?a.each(function(){this.value==t&&(this.checked=!0)}):a.val(t))})}),f.render(null,e),a.getValue(e)},u.prototype.getValue=function(e,i){i=i||t(r+'[lay-filter="'+e+'"]').eq(0);var a={},n={},l=i.find("input,select,textarea");return layui.each(l,function(e,t){if(t.name=(t.name||"").replace(/^\s*|\s*&/,""),t.name){if(/^.*\[\]$/.test(t.name)){var i=t.name.match(/^(.*)\[\]$/g)[0];a[i]=0|a[i],t.name=t.name.replace(/^(.*)\[\]$/,"$1["+a[i]++ +"]")}/^checkbox|radio$/.test(t.type)&&!t.checked||(n[t.name]=t.value)}}),n},u.prototype.render=function(e,i){var n=this,u=t(r+function(){return i?'[lay-filter="'+i+'"]':""}()),d={select:function(){var e,i="请选择",a="layui-form-select",n="layui-select-title",r="layui-select-none",d="",f=u.find("select"),v=function(i,l){t(i.target).parent().hasClass(n)&&!l||(t("."+a).removeClass(a+"ed "+a+"up"),e&&d&&e.val(d)),e=null},y=function(i,u,f){var y,p=t(this),m=i.find("."+n),k=m.find("input"),g=i.find("dl"),x=g.children("dd"),b=this.selectedIndex;if(!u){var C=function(){var e=i.offset().top+i.outerHeight()+5-h.scrollTop(),t=g.outerHeight();b=p[0].selectedIndex,i.addClass(a+"ed"),x.removeClass(o),y=null,x.eq(b).addClass(s).siblings().removeClass(s),e+t>h.height()&&e>=t&&i.addClass(a+"up"),T()},w=function(e){i.removeClass(a+"ed "+a+"up"),k.blur(),y=null,e||$(k.val(),function(e){var i=p[0].selectedIndex;e&&(d=t(p[0].options[i]).html(),0===i&&d===k.attr("placeholder")&&(d=""),k.val(d||""))})},T=function(){var e=g.children("dd."+s);if(e[0]){var t=e.position().top,i=g.height(),a=e.height();t>i&&g.scrollTop(t+g.scrollTop()-i+a-5),t<0&&g.scrollTop(t+g.scrollTop()-5)}};m.on("click",function(e){i.hasClass(a+"ed")?w():(v(e,!0),C()),g.find("."+r).remove()}),m.find(".layui-edge").on("click",function(){k.focus()}),k.on("keyup",function(e){var t=e.keyCode;9===t&&C()}).on("keydown",function(e){var t=e.keyCode;9===t&&w();var i=function(t,a){var n,l;e.preventDefault();var r=function(){var e=g.children("dd."+s);if(g.children("dd."+o)[0]&&"next"===t){var i=g.children("dd:not(."+o+",."+c+")"),n=i.eq(0).index();if(n>=0&&n无匹配项
'):g.find("."+r).remove()},"keyup"),""===t&&g.find("."+r).remove(),void T())};f&&k.on("keyup",q).on("blur",function(i){var a=p[0].selectedIndex;e=k,d=t(p[0].options[a]).html(),0===a&&d===k.attr("placeholder")&&(d=""),setTimeout(function(){$(k.val(),function(e){d||k.val("")},"blur")},200)}),x.on("click",function(){var e=t(this),a=e.attr("lay-value"),n=p.attr("lay-filter");return!e.hasClass(c)&&(e.hasClass("layui-select-tips")?k.val(""):(k.val(e.text()),e.addClass(s)),e.siblings().removeClass(s),p.val(a).removeClass("layui-form-danger"),layui.event.call(this,l,"select("+n+")",{elem:p[0],value:a,othis:i}),w(!0),!1)}),i.find("dl>dt").on("click",function(e){return!1}),t(document).off("click",v).on("click",v)}};f.each(function(e,l){var r=t(this),o=r.next("."+a),u=this.disabled,d=l.value,f=t(l.options[l.selectedIndex]),v=l.options[0];if("string"==typeof r.attr("lay-ignore"))return r.show();var h="string"==typeof r.attr("lay-search"),p=v?v.value?i:v.innerHTML||i:i,m=t(['','
','','
','
',function(e){var t=[];return layui.each(e,function(e,a){0!==e||a.value?"optgroup"===a.tagName.toLowerCase()?t.push("- "+a.label+"
"):t.push('- '+a.innerHTML+"
"):t.push('- '+(a.innerHTML||i)+"
")}),0===t.length&&t.push('- 没有选项
'),t.join("")}(r.find("*"))+"
","
"].join(""));o[0]&&o.remove(),r.after(m),y.call(this,m,u,h)})},checkbox:function(){var e={checkbox:["layui-form-checkbox","layui-form-checked","checkbox"],_switch:["layui-form-switch","layui-form-onswitch","switch"]},i=u.find("input[type=checkbox]"),a=function(e,i){var a=t(this);e.on("click",function(){var t=a.attr("lay-filter"),n=(a.attr("lay-text")||"").split("|");a[0].disabled||(a[0].checked?(a[0].checked=!1,e.removeClass(i[1]).find("em").text(n[1])):(a[0].checked=!0,e.addClass(i[1]).find("em").text(n[0])),layui.event.call(a[0],l,i[2]+"("+t+")",{elem:a[0],value:a[0].value,othis:e}))})};i.each(function(i,n){var l=t(this),r=l.attr("lay-skin"),s=(l.attr("lay-text")||"").split("|"),o=this.disabled;"switch"===r&&(r="_"+r);var u=e[r]||e.checkbox;if("string"==typeof l.attr("lay-ignore"))return l.show();var d=l.next("."+u[0]),f=t(['",function(){var e=n.title.replace(/\s/g,""),t={checkbox:[e?""+n.title+"":"",''].join(""),_switch:""+((n.checked?s[0]:s[1])||"")+""};return t[r]||t.checkbox}(),"
"].join(""));d[0]&&d.remove(),l.after(f),a.call(this,f,u)})},radio:function(){var e="layui-form-radio",i=["",""],a=u.find("input[type=radio]"),n=function(a){var n=t(this),s="layui-anim-scaleSpring";a.on("click",function(){var o=n[0].name,c=n.parents(r),u=n.attr("lay-filter"),d=c.find("input[name="+o.replace(/(\.|#|\[|\])/g,"\\$1")+"]");n[0].disabled||(layui.each(d,function(){var a=t(this).next("."+e);this.checked=!1,a.removeClass(e+"ed"),a.find(".layui-icon").removeClass(s).html(i[1])}),n[0].checked=!0,a.addClass(e+"ed"),a.find(".layui-icon").addClass(s).html(i[0]),layui.event.call(n[0],l,"radio("+u+")",{elem:n[0],value:n[0].value,othis:a}))})};a.each(function(a,l){var r=t(this),s=r.next("."+e),o=this.disabled;if("string"==typeof r.attr("lay-ignore"))return r.show();s[0]&&s.remove();var u=t(['','
'+i[l.checked?0:1]+"","
"+function(){var e=l.title||"";return"string"==typeof r.next().attr("lay-radio")&&(e=r.next().html(),r.next().remove()),e}()+"
","
"].join(""));r.after(u),n.call(this,u)})}};return e?d[e]?d[e]():a.error("不支持的"+e+"表单渲染"):layui.each(d,function(e,t){t()}),n};var d=function(){var e=null,a=f.config.verify,s="layui-form-danger",o={},c=t(this),u=c.parents(r),d=u.find("*[lay-verify]"),v=c.parents("form")[0],h=c.attr("lay-filter");return layui.each(d,function(l,r){var o=t(this),c=o.attr("lay-verify").split("|"),u=o.attr("lay-verType"),d=o.val();if(o.removeClass(s),layui.each(c,function(t,l){var c,f="",v="function"==typeof a[l];if(a[l]){var c=v?f=a[l](d,r):!a[l][0].test(d);if(f=f||a[l][1],"required"===l&&(f=o.attr("lay-reqText")||f),c)return"tips"===u?i.tips(f,function(){return"string"==typeof o.attr("lay-ignore")||"select"!==r.tagName.toLowerCase()&&!/^checkbox|radio$/.test(r.type)?o:o.next()}(),{tips:1}):"alert"===u?i.alert(f,{title:"提示",shadeClose:!0}):/\bstring|number\b/.test(typeof f)&&i.msg(f,{icon:5,shift:6}),n.android||n.ios||setTimeout(function(){r.focus()},7),o.addClass(s),e=!0}}),e)return e}),!e&&(o=f.getValue(null,u),layui.event.call(this,l,"submit("+h+")",{elem:this,form:v,field:o}))},f=new u,v=t(document),h=t(window);f.render(),v.on("reset",r,function(){var e=t(this).attr("lay-filter");setTimeout(function(){f.render(null,e)},50)}),v.on("submit",r,d).on("click","*[lay-submit]",d),e(l,f)});
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/laypage.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.7 MIT License */
2 | ;layui.define(function(e){"use strict";var a=document,t="getElementById",n="getElementsByTagName",i="laypage",r="layui-disabled",u=function(e){var a=this;a.config=e||{},a.config.index=++s.index,a.render(!0)};u.prototype.type=function(){var e=this.config;if("object"==typeof e.elem)return void 0===e.elem.length?2:3},u.prototype.view=function(){var e=this,a=e.config,t=a.groups="groups"in a?0|a.groups:5;a.layout="object"==typeof a.layout?a.layout:["prev","page","next"],a.count=0|a.count,a.curr=0|a.curr||1,a.limits="object"==typeof a.limits?a.limits:[10,20,30,40,50],a.limit=0|a.limit||10,a.pages=Math.ceil(a.count/a.limit)||1,a.curr>a.pages&&(a.curr=a.pages),t<0?t=1:t>a.pages&&(t=a.pages),a.prev="prev"in a?a.prev:"上一页",a.next="next"in a?a.next:"下一页";var n=a.pages>t?Math.ceil((a.curr+(t>1?1:0))/(t>0?t:1)):1,i={prev:function(){return a.prev?''+a.prev+"":""}(),page:function(){var e=[];if(a.count<1)return"";n>1&&a.first!==!1&&0!==t&&e.push(''+(a.first||1)+"");var i=Math.floor((t-1)/2),r=n>1?a.curr-i:1,u=n>1?function(){var e=a.curr+(t-i-1);return e>a.pages?a.pages:e}():t;for(u-r2&&e.push('…');r<=u;r++)r===a.curr?e.push('"+r+""):e.push(''+r+"");return a.pages>t&&a.pages>u&&a.last!==!1&&(u+1…'),0!==t&&e.push(''+(a.last||a.pages)+"")),e.join("")}(),next:function(){return a.next?''+a.next+"":""}(),count:'共 '+a.count+" 条",limit:function(){var e=['"}(),refresh:['','',""].join(""),skip:function(){return['到第','','页',""].join("")}()};return['',function(){var e=[];return layui.each(a.layout,function(a,t){i[t]&&e.push(i[t])}),e.join("")}(),"
"].join("")},u.prototype.jump=function(e,a){if(e){var t=this,i=t.config,r=e.children,u=e[n]("button")[0],l=e[n]("input")[0],p=e[n]("select")[0],c=function(){var e=0|l.value.replace(/\s|\D/g,"");e&&(i.curr=e,t.render())};if(a)return c();for(var o=0,y=r.length;oi.pages||(i.curr=e,t.render())});p&&s.on(p,"change",function(){var e=this.value;i.curr*e>i.count&&(i.curr=Math.ceil(i.count/e)),i.limit=e,t.render()}),u&&s.on(u,"click",function(){c()})}},u.prototype.skip=function(e){if(e){var a=this,t=e[n]("input")[0];t&&s.on(t,"keyup",function(t){var n=this.value,i=t.keyCode;/^(37|38|39|40)$/.test(i)||(/\D/.test(n)&&(this.value=n.replace(/\D/,"")),13===i&&a.jump(e,!0))})}},u.prototype.render=function(e){var n=this,i=n.config,r=n.type(),u=n.view();2===r?i.elem&&(i.elem.innerHTML=u):3===r?i.elem.html(u):a[t](i.elem)&&(a[t](i.elem).innerHTML=u),i.jump&&i.jump(i,e);var s=a[t]("layui-laypage-"+i.index);n.jump(s),i.hash&&!e&&(location.hash="!"+i.hash+"="+i.curr),n.skip(s)};var s={render:function(e){var a=new u(e);return a.index},index:layui.laypage?layui.laypage.index+1e4:0,on:function(e,a,t){return e.attachEvent?e.attachEvent("on"+a,function(a){a.target=a.srcElement,t.call(e,a)}):e.addEventListener(a,t,!1),this}};e(i,s)});
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/laytpl.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.7 MIT License */
2 | ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},c={exp:function(e){return new RegExp(e,"g")},query:function(e,c,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return n((c||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var c="Laytpl Error:";return"object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(n(r.open+"#"),r.open+"# ").replace(n(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(n(r.open+"!(.+?)!"+r.close),function(e){return e=e.replace(n("^"+r.open+"!"),"").replace(n("!"+r.close),"").replace(n(r.open+"|"+r.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(c.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(c.query(1),function(e){var c='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error("no data")};var o=function(e){return"string"!=typeof e?c.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v="1.2.0",e("laytpl",o)});
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/rate.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.7 MIT License */
2 | ;layui.define("jquery",function(e){"use strict";var a=layui.jquery,l={config:{},index:layui.rate?layui.rate.index+1e4:0,set:function(e){var l=this;return l.config=a.extend({},l.config,e),l},on:function(e,a){return layui.onevent.call(this,n,e,a)}},i=function(){var e=this,a=e.config;return{setvalue:function(a){e.setvalue.call(e,a)},config:a}},n="rate",t="layui-rate",o="layui-icon-rate",u="layui-icon-rate-solid",s="layui-icon-rate-half",r="layui-icon-rate-solid layui-icon-rate-half",c="layui-icon-rate-solid layui-icon-rate",f="layui-icon-rate layui-icon-rate-half",v=function(e){var i=this;i.index=++l.index,i.config=a.extend({},i.config,l.config,e),i.render()};v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:""},v.prototype.render=function(){var e=this,l=e.config,i=l.theme?'style="color: '+l.theme+';"':"";l.elem=a(l.elem),l.value>l.length&&(l.value=l.length),parseInt(l.value)!==l.value&&(l.half||(l.value=Math.ceil(l.value)-l.value<.5?Math.ceil(l.value):Math.floor(l.value)));for(var n='",s=1;s<=l.length;s++){var r=' ";l.half&&parseInt(l.value)!==l.value&&s==Math.ceil(l.value)?n=n+' ":n+=r}n+="
"+(l.text?''+l.value+"星":"")+"";var c=l.elem,f=c.next("."+t);f[0]&&f.remove(),e.elemTemp=a(n),l.span=e.elemTemp.next("span"),l.setText&&l.setText(l.value),c.html(e.elemTemp),c.addClass("layui-inline"),l.readonly||e.action()},v.prototype.setvalue=function(e){var a=this,l=a.config;l.value=e,a.render()},v.prototype.action=function(){var e=this,l=e.config,i=e.elemTemp,n=i.find("i").width();i.children("li").each(function(e){var t=e+1,v=a(this);v.on("click",function(e){if(l.value=t,l.half){var o=e.pageX-a(this).offset().left;o<=n/2&&(l.value=l.value-.5)}l.text&&i.next("span").text(l.value+"星"),l.choose&&l.choose(l.value),l.setText&&l.setText(l.value)}),v.on("mousemove",function(e){if(i.find("i").each(function(){a(this).addClass(o).removeClass(r)}),i.find("i:lt("+t+")").each(function(){a(this).addClass(u).removeClass(f)}),l.half){var c=e.pageX-a(this).offset().left;c<=n/2&&v.children("i").addClass(s).removeClass(u)}}),v.on("mouseleave",function(){i.find("i").each(function(){a(this).addClass(o).removeClass(r)}),i.find("i:lt("+Math.floor(l.value)+")").each(function(){a(this).addClass(u).removeClass(f)}),l.half&&parseInt(l.value)!==l.value&&i.children("li:eq("+Math.floor(l.value)+")").children("i").addClass(s).removeClass(c)})})},v.prototype.events=function(){var e=this;e.config},l.render=function(e){var a=new v(e);return i.call(a)},e(n,l)});
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/slider.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.7 MIT License */
2 | ;layui.define("jquery",function(e){"use strict";var i=layui.jquery,t={config:{},index:layui.slider?layui.slider.index+1e4:0,set:function(e){var t=this;return t.config=i.extend({},t.config,e),t},on:function(e,i){return layui.onevent.call(this,n,e,i)}},a=function(){var e=this,i=e.config;return{setValue:function(t,a){return i.value=t,e.slide("set",t,a||0)},config:i}},n="slider",l="layui-disabled",s="layui-slider",r="layui-slider-bar",o="layui-slider-wrap",u="layui-slider-wrap-btn",d="layui-slider-tips",v="layui-slider-input",c="layui-slider-input-txt",p="layui-slider-input-btn",m="layui-slider-hover",f=function(e){var a=this;a.index=++t.index,a.config=i.extend({},a.config,t.config,e),a.render()};f.prototype.config={type:"default",min:0,max:100,value:0,step:1,showstep:!1,tips:!0,input:!1,range:!1,height:200,disabled:!1,theme:"#009688"},f.prototype.render=function(){var e=this,t=e.config;if(t.step<1&&(t.step=1),t.maxt.min?a:t.min,t.value[1]=n>t.min?n:t.min,t.value[0]=t.value[0]>t.max?t.max:t.value[0],t.value[1]=t.value[1]>t.max?t.max:t.value[1];var r=Math.floor((t.value[0]-t.min)/(t.max-t.min)*100),v=Math.floor((t.value[1]-t.min)/(t.max-t.min)*100),p=v-r+"%";r+="%",v+="%"}else{"object"==typeof t.value&&(t.value=Math.min.apply(null,t.value)),t.valuet.max&&(t.value=t.max);var p=Math.floor((t.value-t.min)/(t.max-t.min)*100)+"%"}var m=t.disabled?"#c2c2c2":t.theme,f=''+(t.tips?'
':"")+'
'+(t.range?'
':"")+"
",h=i(t.elem),y=h.next("."+s);if(y[0]&&y.remove(),e.elemTemp=i(f),t.range?(e.elemTemp.find("."+o).eq(0).data("value",t.value[0]),e.elemTemp.find("."+o).eq(1).data("value",t.value[1])):e.elemTemp.find("."+o).data("value",t.value),h.html(e.elemTemp),"vertical"===t.type&&e.elemTemp.height(t.height+"px"),t.showstep){for(var g=(t.max-t.min)/t.step,b="",x=1;x')}e.elemTemp.append(b)}if(t.input&&!t.range){var w=i('');h.css("position","relative"),h.append(w),h.find("."+c).children("input").val(t.value),"vertical"===t.type?w.css({left:0,top:-48}):e.elemTemp.css("margin-right",w.outerWidth()+15)}t.disabled?(e.elemTemp.addClass(l),e.elemTemp.find("."+u).addClass(l)):e.slide(),e.elemTemp.find("."+u).on("mouseover",function(){var a="vertical"===t.type?t.height:e.elemTemp[0].offsetWidth,n=e.elemTemp.find("."+o),l="vertical"===t.type?a-i(this).parent()[0].offsetTop-n.height():i(this).parent()[0].offsetLeft,s=l/a*100,r=i(this).parent().data("value"),u=t.setTips?t.setTips(r):r;e.elemTemp.find("."+d).html(u),"vertical"===t.type?e.elemTemp.find("."+d).css({bottom:s+"%","margin-bottom":"20px",display:"inline-block"}):e.elemTemp.find("."+d).css({left:s+"%",display:"inline-block"})}).on("mouseout",function(){e.elemTemp.find("."+d).css("display","none")})},f.prototype.slide=function(e,t,a){var n=this,l=n.config,s=n.elemTemp,f=function(){return"vertical"===l.type?l.height:s[0].offsetWidth},h=s.find("."+o),y=s.next("."+v),g=y.children("."+c).children("input").val(),b=100/((l.max-l.min)/Math.ceil(l.step)),x=function(e,i){e=Math.ceil(e)*b>100?Math.ceil(e)*b:Math.round(e)*b,e=e>100?100:e,h.eq(i).css("vertical"===l.type?"bottom":"left",e+"%");var t=T(h[0].offsetLeft),a=l.range?T(h[1].offsetLeft):0;"vertical"===l.type?(s.find("."+d).css({bottom:e+"%","margin-bottom":"20px"}),t=T(f()-h[0].offsetTop-h.height()),a=l.range?T(f()-h[1].offsetTop-h.height()):0):s.find("."+d).css("left",e+"%"),t=t>100?100:t,a=a>100?100:a;var n=Math.min(t,a),o=Math.abs(t-a);"vertical"===l.type?s.find("."+r).css({height:o+"%",bottom:n+"%"}):s.find("."+r).css({width:o+"%",left:n+"%"});var u=l.min+Math.round((l.max-l.min)*e/100);if(g=u,y.children("."+c).children("input").val(g),h.eq(i).data("value",u),s.find("."+d).html(l.setTips?l.setTips(u):u),l.range){var v=[h.eq(0).data("value"),h.eq(1).data("value")];v[0]>v[1]&&v.reverse()}l.change&&l.change(l.range?v:u)},T=function(e){var i=e/f()*100/b,t=Math.round(i)*b;return e==f()&&(t=Math.ceil(i)*b),t},w=i(['f()&&(r=f());var o=r/f()*100/b;x(o,e),t.addClass(m),s.find("."+d).show(),i.preventDefault()},o=function(){t.removeClass(m),s.find("."+d).hide()};M(r,o)})}),s.on("click",function(e){var t=i("."+u);if(!t.is(event.target)&&0===t.has(event.target).length&&t.length){var a,n="vertical"===l.type?f()-e.clientY+i(this).offset().top:e.clientX-i(this).offset().left;n<0&&(n=0),n>f()&&(n=f());var s=n/f()*100/b;a=l.range?"vertical"===l.type?Math.abs(n-parseInt(i(h[0]).css("bottom")))>Math.abs(n-parseInt(i(h[1]).css("bottom")))?1:0:Math.abs(n-h[0].offsetLeft)>Math.abs(n-h[1].offsetLeft)?1:0:0,x(s,a),e.preventDefault()}}),y.children("."+p).children("i").each(function(e){i(this).on("click",function(){g=y.children("."+c).children("input").val(),g=1==e?g-l.stepl.max?l.max:Number(g)+l.step;var i=(g-l.min)/(l.max-l.min)*100/b;x(i,0)})});var q=function(){var e=this.value;e=isNaN(e)?0:e,e=el.max?l.max:e,this.value=e;var i=(e-l.min)/(l.max-l.min)*100/b;x(i,0)};y.children("."+c).children("input").on("keydown",function(e){13===e.keyCode&&(e.preventDefault(),q.call(this))}).on("change",q)},f.prototype.events=function(){var e=this;e.config},t.render=function(e){var i=new f(e);return a.call(i)},e(n,t)});
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/transfer.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.7 MIT License */
2 | ;layui.define(["laytpl","form"],function(e){"use strict";var a=layui.$,t=layui.laytpl,n=layui.form,i="transfer",l={config:{},index:layui[i]?layui[i].index+1e4:0,set:function(e){var t=this;return t.config=a.extend({},t.config,e),t},on:function(e,a){return layui.onevent.call(this,i,e,a)}},r=function(){var e=this,a=e.config,t=a.id||e.index;return r.that[t]=e,r.config[t]=a,{config:a,reload:function(a){e.reload.call(e,a)},getData:function(){return e.getData.call(e)}}},c="layui-hide",o="layui-btn-disabled",d="layui-none",s="layui-transfer-box",u="layui-transfer-header",h="layui-transfer-search",f="layui-transfer-active",y="layui-transfer-data",p=function(e){return e=e||{},['','","{{# if(d.data.showSearch){ }}",'
','','',"
","{{# } }}",'
',"
"].join("")},v=['"].join(""),x=function(e){var t=this;t.index=++l.index,t.config=a.extend({},t.config,l.config,e),t.render()};x.prototype.config={title:["列表一","列表二"],width:200,height:360,data:[],value:[],showSearch:!1,id:"",text:{none:"无数据",searchNone:"无匹配数据"}},x.prototype.reload=function(e){var t=this;layui.each(e,function(e,a){a.constructor===Array&&delete t.config[e]}),t.config=a.extend(!0,{},t.config,e),t.render()},x.prototype.render=function(){var e=this,n=e.config,i=e.elem=a(t(v).render({data:n,index:e.index})),l=n.elem=a(n.elem);l[0]&&(n.data=n.data||[],n.value=n.value||[],e.key=n.id||e.index,l.html(e.elem),e.layBox=e.elem.find("."+s),e.layHeader=e.elem.find("."+u),e.laySearch=e.elem.find("."+h),e.layData=i.find("."+y),e.layBtn=i.find("."+f+" .layui-btn"),e.layBox.css({width:n.width,height:n.height}),e.layData.css({height:function(){return n.height-e.layHeader.outerHeight()-e.laySearch.outerHeight()-2}()}),e.renderData(),e.events())},x.prototype.renderData=function(){var e=this,a=(e.config,[{checkName:"layTransferLeftCheck",views:[]},{checkName:"layTransferRightCheck",views:[]}]);e.parseData(function(e){var t=e.selected?1:0,n=["",'',""].join("");a[t].views.push(n),delete e.selected}),e.layData.eq(0).html(a[0].views.join("")),e.layData.eq(1).html(a[1].views.join("")),e.renderCheckBtn()},x.prototype.renderForm=function(e){n.render(e,"LAY-transfer-"+this.index)},x.prototype.renderCheckBtn=function(e){var t=this,n=t.config;e=e||{},t.layBox.each(function(i){var l=a(this),r=l.find("."+y),d=l.find("."+u).find('input[type="checkbox"]'),s=r.find('input[type="checkbox"]'),h=0,f=!1;if(s.each(function(){var e=a(this).data("hide");(this.checked||this.disabled||e)&&h++,this.checked&&!e&&(f=!0)}),d.prop("checked",f&&h===s.length),t.layBtn.eq(i)[f?"removeClass":"addClass"](o),!e.stopNone){var p=r.children("li:not(."+c+")").length;t.noneView(r,p?"":n.text.none)}}),t.renderForm("checkbox")},x.prototype.noneView=function(e,t){var n=a(''+(t||"")+"
");e.find("."+d)[0]&&e.find("."+d).remove(),t.replace(/\s/g,"")&&e.append(n)},x.prototype.setValue=function(){var e=this,t=e.config,n=[];return e.layBox.eq(1).find("."+y+' input[type="checkbox"]').each(function(){var e=a(this).data("hide");e||n.push(this.value)}),t.value=n,e},x.prototype.parseData=function(e){var t=this,n=t.config,i=[];return layui.each(n.data,function(t,l){l=("function"==typeof n.parseData?n.parseData(l):l)||l,i.push(l=a.extend({},l)),layui.each(n.value,function(e,a){a==l.value&&(l.selected=!0)}),e&&e(l)}),n.data=i,t},x.prototype.getData=function(e){var a=this,t=a.config,n=[];return a.setValue(),layui.each(e||t.value,function(e,a){layui.each(t.data,function(e,t){delete t.selected,a==t.value&&n.push(t)})}),n},x.prototype.events=function(){var e=this,t=e.config;e.elem.on("click",'input[lay-filter="layTransferCheckbox"]+',function(){var t=a(this).prev(),n=t[0].checked,i=t.parents("."+s).eq(0).find("."+y);t[0].disabled||("all"===t.attr("lay-type")&&i.find('input[type="checkbox"]').each(function(){this.disabled||(this.checked=n)}),e.renderCheckBtn({stopNone:!0}))}),e.layBtn.on("click",function(){var n=a(this),i=n.data("index"),l=e.layBox.eq(i),r=[];if(!n.hasClass(o)){e.layBox.eq(i).each(function(t){var n=a(this),i=n.find("."+y);i.children("li").each(function(){var t=a(this),n=t.find('input[type="checkbox"]'),i=n.data("hide");n[0].checked&&!i&&(n[0].checked=!1,l.siblings("."+s).find("."+y).append(t.clone()),t.remove(),r.push(n[0].value)),e.setValue()})}),e.renderCheckBtn();var c=l.siblings("."+s).find("."+h+" input");""===c.val()||c.trigger("keyup"),t.onchange&&t.onchange(e.getData(r),i)}}),e.laySearch.find("input").on("keyup",function(){var n=this.value,i=a(this).parents("."+h).eq(0).siblings("."+y),l=i.children("li");l.each(function(){var e=a(this),t=e.find('input[type="checkbox"]'),i=t[0].title.indexOf(n)!==-1;e[i?"removeClass":"addClass"](c),t.data("hide",!i)}),e.renderCheckBtn();var r=l.length===i.children("li."+c).length;e.noneView(i,r?t.text.searchNone:"")})},r.that={},r.config={},l.reload=function(e,a){var t=r.that[e];return t.reload(a),r.call(t)},l.getData=function(e){var a=r.that[e];return a.getData()},l.render=function(e){var a=new x(e);return r.call(a)},e(i,l)});
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/upload.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.7 MIT License */
2 | ;layui.define("layer",function(e){"use strict";var t=layui.$,i=layui.layer,n=layui.hint(),o=layui.device(),a={config:{},set:function(e){var i=this;return i.config=t.extend({},i.config,e),i},on:function(e,t){return layui.onevent.call(this,r,e,t)}},l=function(){var e=this;return{upload:function(t){e.upload.call(e,t)},reload:function(t){e.reload.call(e,t)},config:e.config}},r="upload",u="layui-upload-file",c="layui-upload-form",f="layui-upload-iframe",s="layui-upload-choose",p=function(e){var i=this;i.config=t.extend({},i.config,a.config,e),i.render()};p.prototype.config={accept:"images",exts:"",auto:!0,bindAction:"",url:"",field:"file",acceptMime:"",method:"post",data:{},drag:!0,size:0,number:0,multiple:!1},p.prototype.render=function(e){var i=this,e=i.config;e.elem=t(e.elem),e.bindAction=t(e.bindAction),i.file(),i.events()},p.prototype.file=function(){var e=this,i=e.config,n=e.elemFile=t(['"].join("")),a=i.elem.next();(a.hasClass(u)||a.hasClass(c))&&a.remove(),o.ie&&o.ie<10&&i.elem.wrap(''),e.isFile()?(e.elemFile=i.elem,i.field=i.elem[0].name):i.elem.after(n),o.ie&&o.ie<10&&e.initIE()},p.prototype.initIE=function(){var e=this,i=e.config,n=t(''),o=t(['"].join(""));t("#"+f)[0]||t("body").append(n),i.elem.next().hasClass(c)||(e.elemFile.wrap(o),i.elem.next("."+c).append(function(){var e=[];return layui.each(i.data,function(t,i){i="function"==typeof i?i():i,e.push('')}),e.join("")}()))},p.prototype.msg=function(e){return i.msg(e,{icon:2,shift:6})},p.prototype.isFile=function(){var e=this.config.elem[0];if(e)return"input"===e.tagName.toLocaleLowerCase()&&"file"===e.type},p.prototype.preview=function(e){var t=this;window.FileReader&&layui.each(t.chooseFiles,function(t,i){var n=new FileReader;n.readAsDataURL(i),n.onload=function(){e&&e(t,i,this.result)}})},p.prototype.upload=function(e,i){var n,a=this,l=a.config,r=a.elemFile[0],u=function(){var i=0,n=0,o=e||a.files||a.chooseFiles||r.files,u=function(){l.multiple&&i+n===a.fileLength&&"function"==typeof l.allDone&&l.allDone({total:a.fileLength,successful:i,aborted:n})};layui.each(o,function(e,o){var r=new FormData;r.append(l.field,o),layui.each(l.data,function(e,t){t="function"==typeof t?t():t,r.append(e,t)});var c={url:l.url,type:"post",data:r,contentType:!1,processData:!1,dataType:"json",headers:l.headers||{},success:function(t){i++,d(e,t),u()},error:function(){n++,a.msg("请求上传接口出现异常"),m(e),u()}};"function"==typeof l.progress&&(c.xhr=function(){var e=t.ajaxSettings.xhr();return e.upload.addEventListener("progress",function(e){if(e.lengthComputable){var t=Math.floor(e.loaded/e.total*100);l.progress(t,l.item[0],e)}}),e}),t.ajax(c)})},c=function(){var e=t("#"+f);a.elemFile.parent().submit(),clearInterval(p.timer),p.timer=setInterval(function(){var t,i=e.contents().find("body");try{t=i.text()}catch(n){a.msg("获取上传后的响应信息出现异常"),clearInterval(p.timer),m()}t&&(clearInterval(p.timer),i.html(""),d(0,t))},30)},d=function(e,t){if(a.elemFile.next("."+s).remove(),r.value="","object"!=typeof t)try{t=JSON.parse(t)}catch(i){return t={},a.msg("请对上传接口返回有效JSON")}"function"==typeof l.done&&l.done(t,e||0,function(e){a.upload(e)})},m=function(e){l.auto&&(r.value=""),"function"==typeof l.error&&l.error(e||0,function(e){a.upload(e)})},h=l.exts,v=function(){var t=[];return layui.each(e||a.chooseFiles,function(e,i){t.push(i.name)}),t}(),g={preview:function(e){a.preview(e)},upload:function(e,t){var i={};i[e]=t,a.upload(i)},pushFile:function(){return a.files=a.files||{},layui.each(a.chooseFiles,function(e,t){a.files[e]=t}),a.files},resetFile:function(e,t,i){var n=new File([t],i);a.files=a.files||{},a.files[e]=n}},y=function(){if("choose"!==i&&!l.auto||(l.choose&&l.choose(g),"choose"!==i))return l.before&&l.before(g),o.ie?o.ie>9?u():c():void u()};if(v=0===v.length?r.value.match(/[^\/\\]+\..+/g)||[]||"":v,0!==v.length){switch(l.accept){case"file":if(h&&!RegExp("\\w\\.("+h+")$","i").test(escape(v)))return a.msg("选择的文件中包含不支持的格式"),r.value="";break;case"video":if(!RegExp("\\w\\.("+(h||"avi|mp4|wma|rmvb|rm|flash|3gp|flv")+")$","i").test(escape(v)))return a.msg("选择的视频中包含不支持的格式"),r.value="";break;case"audio":if(!RegExp("\\w\\.("+(h||"mp3|wav|mid")+")$","i").test(escape(v)))return a.msg("选择的音频中包含不支持的格式"),r.value="";break;default:if(layui.each(v,function(e,t){RegExp("\\w\\.("+(h||"jpg|png|gif|bmp|jpeg$")+")","i").test(escape(t))||(n=!0)}),n)return a.msg("选择的图片中包含不支持的格式"),r.value=""}if(a.fileLength=function(){var t=0,i=e||a.files||a.chooseFiles||r.files;return layui.each(i,function(){t++}),t}(),l.number&&a.fileLength>l.number)return a.msg("同时最多只能上传的数量为:"+l.number);if(l.size>0&&!(o.ie&&o.ie<10)){var F;if(layui.each(a.chooseFiles,function(e,t){if(t.size>1024*l.size){var i=l.size/1024;i=i>=1?i.toFixed(2)+"MB":l.size+"KB",r.value="",F=i}}),F)return a.msg("文件不能超过"+F)}y()}},p.prototype.reload=function(e){e=e||{},delete e.elem,delete e.bindAction;var i=this,e=i.config=t.extend({},i.config,a.config,e),n=e.elem.next();n.attr({name:e.name,accept:e.acceptMime,multiple:e.multiple})},p.prototype.events=function(){var e=this,i=e.config,a=function(t){e.chooseFiles={},layui.each(t,function(t,i){var n=(new Date).getTime();e.chooseFiles[n+"-"+t]=i})},l=function(t,n){var o=e.elemFile,a=t.length>1?t.length+"个文件":(t[0]||{}).name||o[0].value.match(/[^\/\\]+\..+/g)||[]||"";o.next().hasClass(s)&&o.next().remove(),e.upload(null,"choose"),e.isFile()||i.choose||o.after(''+a+"")};i.elem.off("upload.start").on("upload.start",function(){var o=t(this),a=o.attr("lay-data");if(a)try{a=new Function("return "+a)(),e.config=t.extend({},i,a)}catch(l){n.error("Upload element property lay-data configuration item has a syntax error: "+a)}e.config.item=o,e.elemFile[0].click()}),o.ie&&o.ie<10||i.elem.off("upload.over").on("upload.over",function(){var e=t(this);e.attr("lay-over","")}).off("upload.leave").on("upload.leave",function(){var e=t(this);e.removeAttr("lay-over")}).off("upload.drop").on("upload.drop",function(n,o){var r=t(this),u=o.originalEvent.dataTransfer.files||[];r.removeAttr("lay-over"),a(u),i.auto?e.upload(u):l(u)}),e.elemFile.off("upload.change").on("upload.change",function(){var t=this.files||[];a(t),i.auto?e.upload():l(t)}),i.bindAction.off("upload.action").on("upload.action",function(){e.upload()}),i.elem.data("haveEvents")||(e.elemFile.on("change",function(){t(this).trigger("upload.change")}),i.elem.on("click",function(){e.isFile()||t(this).trigger("upload.start")}),i.drag&&i.elem.on("dragover",function(e){e.preventDefault(),t(this).trigger("upload.over")}).on("dragleave",function(e){t(this).trigger("upload.leave")}).on("drop",function(e){e.preventDefault(),t(this).trigger("upload.drop",e)}),i.bindAction.on("click",function(){t(this).trigger("upload.action")}),i.elem.data("haveEvents",!0))},a.render=function(e){var t=new p(e);return l.call(t)},e(r,a)});
--------------------------------------------------------------------------------
/src/main/resources/static/layui/lay/modules/util.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.7 MIT License */
2 | ;layui.define("jquery",function(e){"use strict";var t=layui.$,i={fixbar:function(e){var i,n,a="layui-fixbar",o="layui-fixbar-top",r=t(document),l=t("body");e=t.extend({showHeight:200},e),e.bar1=e.bar1===!0?"":e.bar1,e.bar2=e.bar2===!0?"":e.bar2,e.bgcolor=e.bgcolor?"background-color:"+e.bgcolor:"";var c=[e.bar1,e.bar2,""],u=t(['',e.bar1?'- '+c[0]+"
":"",e.bar2?'- '+c[1]+"
":"",'- '+c[2]+"
","
"].join("")),g=u.find("."+o),s=function(){var t=r.scrollTop();t>=e.showHeight?i||(g.show(),i=1):i&&(g.hide(),i=0)};t("."+a)[0]||("object"==typeof e.css&&u.css(e.css),l.append(u),s(),u.find("li").on("click",function(){var i=t(this),n=i.attr("lay-type");"top"===n&&t("html,body").animate({scrollTop:0},200),e.click&&e.click.call(this,n)}),r.on("scroll",function(){clearTimeout(n),n=setTimeout(function(){s()},100)}))},countdown:function(e,t,i){var n=this,a="function"==typeof t,o=new Date(e).getTime(),r=new Date(!t||a?(new Date).getTime():t).getTime(),l=o-r,c=[Math.floor(l/864e5),Math.floor(l/36e5)%24,Math.floor(l/6e4)%60,Math.floor(l/1e3)%60];a&&(i=t);var u=setTimeout(function(){n.countdown(e,r+1e3,i)},1e3);return i&&i(l>0?c:[0,0,0,0],t,u),l<=0&&clearTimeout(u),u},timeAgo:function(e,t){var i=this,n=[[],[]],a=(new Date).getTime()-new Date(e).getTime();return a>26784e5?(a=new Date(e),n[0][0]=i.digit(a.getFullYear(),4),n[0][1]=i.digit(a.getMonth()+1),n[0][2]=i.digit(a.getDate()),t||(n[1][0]=i.digit(a.getHours()),n[1][1]=i.digit(a.getMinutes()),n[1][2]=i.digit(a.getSeconds())),n[0].join("-")+" "+n[1].join(":")):a>=864e5?(a/1e3/60/60/24|0)+"天前":a>=36e5?(a/1e3/60/60|0)+"小时前":a>=18e4?(a/1e3/60|0)+"分钟前":a<0?"未来":"刚刚"},digit:function(e,t){var i="";e=String(e),t=t||2;for(var n=e.length;n/g,">").replace(/'/g,"'").replace(/"/g,""")},event:function(e,n,a){var o=t("body");return a=a||"click",n=i.event[e]=t.extend(!0,i.event[e],n)||{},i.event.UTIL_EVENT_CALLBACK=i.event.UTIL_EVENT_CALLBACK||{},o.off(a,"*["+e+"]",i.event.UTIL_EVENT_CALLBACK[e]),i.event.UTIL_EVENT_CALLBACK[e]=function(){var i=t(this),a=i.attr(e);"function"==typeof n[a]&&n[a].call(this,i)},o.on(a,"*["+e+"]",i.event.UTIL_EVENT_CALLBACK[e]),n}};!function(e,t,i){"$:nomunge";function n(){a=t[l](function(){o.each(function(){var t=e(this),i=t.width(),n=t.height(),a=e.data(this,u);(i!==a.w||n!==a.h)&&t.trigger(c,[a.w=i,a.h=n])}),n()},r[g])}var a,o=e([]),r=e.resize=e.extend(e.resize,{}),l="setTimeout",c="resize",u=c+"-special-event",g="delay",s="throttleWindow";r[g]=250,r[s]=!0,e.event.special[c]={setup:function(){if(!r[s]&&this[l])return!1;var t=e(this);o=o.add(t),e.data(this,u,{w:t.width(),h:t.height()}),1===o.length&&n()},teardown:function(){if(!r[s]&&this[l])return!1;var t=e(this);o=o.not(t),t.removeData(u),o.length||clearTimeout(a)},add:function(t){function n(t,n,o){var r=e(this),l=e.data(this,u)||{};l.w=n!==i?n:r.width(),l.h=o!==i?o:r.height(),a.apply(this,arguments)}if(!r[s]&&this[l])return!1;var a;return e.isFunction(t)?(a=t,n):(a=t.handler,void(t.handler=n))}}}(t,window),e("util",i)});
--------------------------------------------------------------------------------
/src/main/resources/static/layui/layui.js:
--------------------------------------------------------------------------------
1 | /** layui-v2.5.7 MIT License */
2 | ;!function(e){"use strict";var t=document,n={modules:{},status:{},timeout:10,event:{}},o=function(){this.v="2.5.7"},r=function(){var e=t.currentScript?t.currentScript.src:function(){for(var e,n=t.scripts,o=n.length-1,r=o;r>0;r--)if("interactive"===n[r].readyState){e=n[r].src;break}return e||n[o].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),a=function(t){e.console&&console.error&&console.error("Layui hint: "+t)},i="undefined"!=typeof opera&&"[object Opera]"===opera.toString(),u={layer:"modules/layer",laydate:"modules/laydate",laypage:"modules/laypage",laytpl:"modules/laytpl",layim:"modules/layim",layedit:"modules/layedit",form:"modules/form",upload:"modules/upload",transfer:"modules/transfer",tree:"modules/tree",table:"modules/table",element:"modules/element",rate:"modules/rate",colorpicker:"modules/colorpicker",slider:"modules/slider",carousel:"modules/carousel",flow:"modules/flow",util:"modules/util",code:"modules/code",jquery:"modules/jquery",mobile:"modules/mobile","layui.all":"../layui.all"};o.prototype.cache=n,o.prototype.define=function(e,t){var o=this,r="function"==typeof e,a=function(){var e=function(e,t){layui[e]=t,n.status[e]=!0};return"function"==typeof t&&t(function(o,r){e(o,r),n.callback[o]=function(){t(e)}}),this};return r&&(t=e,e=[]),!layui["layui.all"]&&layui["layui.mobile"]?a.call(o):(o.use(e,a),o)},o.prototype.use=function(e,o,l){function c(e,t){var o="PLaySTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/;("load"===e.type||o.test((e.currentTarget||e.srcElement).readyState))&&(n.modules[d]=t,y.removeChild(h),function r(){return++m>1e3*n.timeout/4?a(d+" is not a valid module"):void(n.status[d]?s():setTimeout(r,4))}())}function s(){l.push(layui[d]),e.length>1?p.use(e.slice(1),o,l):"function"==typeof o&&o.apply(layui,l)}var p=this,f=n.dir=n.dir?n.dir:r,y=t.getElementsByTagName("head")[0];e="string"==typeof e?[e]:e,window.jQuery&&jQuery.fn.on&&(p.each(e,function(t,n){"jquery"===n&&e.splice(t,1)}),layui.jquery=layui.$=jQuery);var d=e[0],m=0;if(l=l||[],n.host=n.host||(f.match(/\/\/([\s\S]+?)\//)||["//"+location.host+"/"])[0],0===e.length||layui["layui.all"]&&u[d]||!layui["layui.all"]&&layui["layui.mobile"]&&u[d])return s(),p;var v=(u[d]?f+"lay/":/^\{\/\}/.test(p.modules[d])?"":n.base||"")+(p.modules[d]||d)+".js";if(v=v.replace(/^\{\/\}/,""),!n.modules[d]&&layui[d]&&(n.modules[d]=v),n.modules[d])!function g(){return++m>1e3*n.timeout/4?a(d+" is not a valid module"):void("string"==typeof n.modules[d]&&n.status[d]?s():setTimeout(g,4))}();else{var h=t.createElement("script");h.async=!0,h.charset="utf-8",h.src=v+function(){var e=n.version===!0?n.v||(new Date).getTime():n.version||"";return e?"?v="+e:""}(),y.appendChild(h),!h.attachEvent||h.attachEvent.toString&&h.attachEvent.toString().indexOf("[native code")<0||i?h.addEventListener("load",function(e){c(e,v)},!1):h.attachEvent("onreadystatechange",function(e){c(e,v)}),n.modules[d]=v}return p},o.prototype.getStyle=function(t,n){var o=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return o[o.getPropertyValue?"getPropertyValue":"getAttribute"](n)},o.prototype.link=function(e,o,r){var i=this,u=t.createElement("link"),l=t.getElementsByTagName("head")[0];"string"==typeof o&&(r=o);var c=(r||e).replace(/\.|\//g,""),s=u.id="layuicss-"+c,p=0;return u.rel="stylesheet",u.href=e+(n.debug?"?v="+(new Date).getTime():""),u.media="all",t.getElementById(s)||l.appendChild(u),"function"!=typeof o?i:(function f(){return++p>1e3*n.timeout/100?a(e+" timeout"):void(1989===parseInt(i.getStyle(t.getElementById(s),"width"))?function(){o()}():setTimeout(f,100))}(),i)},n.callback={},o.prototype.factory=function(e){if(layui[e])return"function"==typeof n.callback[e]?n.callback[e]:null},o.prototype.addcss=function(e,t,o){return layui.link(n.dir+"css/"+e,t,o)},o.prototype.img=function(e,t,n){var o=new Image;return o.src=e,o.complete?t(o):(o.onload=function(){o.onload=null,"function"==typeof t&&t(o)},void(o.onerror=function(e){o.onerror=null,"function"==typeof n&&n(e)}))},o.prototype.config=function(e){e=e||{};for(var t in e)n[t]=e[t];return this},o.prototype.modules=function(){var e={};for(var t in u)e[t]=u[t];return e}(),o.prototype.extend=function(e){var t=this;e=e||{};for(var n in e)t[n]||t.modules[n]?a("模块名 "+n+" 已被占用"):t.modules[n]=e[n];return t},o.prototype.router=function(e){var t=this,e=e||location.hash,n={path:[],search:{},hash:(e.match(/[^#](#.*$)/)||[])[1]||""};return/^#\//.test(e)?(e=e.replace(/^#\//,""),n.href="/"+e,e=e.replace(/([^#])(#.*$)/,"$1").split("/")||[],t.each(e,function(e,t){/^\w+=/.test(t)?function(){t=t.split("="),n.search[t[0]]=t[1]}():n.path.push(t)}),n):n},o.prototype.url=function(e){var t=this,n={pathname:function(){var t=e?function(){var t=(e.match(/\.[^.]+?\/.+/)||[])[0]||"";return t.replace(/^[^\/]+/,"").replace(/\?.+/,"")}():location.pathname;return t.replace(/^\//,"").split("/")}(),search:function(){var n={},o=(e?function(){var t=(e.match(/\?.+/)||[])[0]||"";return t.replace(/\#.+/,"")}():location.search).replace(/^\?+/,"").split("&");return t.each(o,function(e,t){var o=t.indexOf("="),r=function(){return o<0?t.substr(0,t.length):0!==o&&t.substr(0,o)}();r&&(n[r]=o>0?t.substr(o+1):null)}),n}(),hash:t.router(function(){return e?(e.match(/#.+/)||[])[0]||"":location.hash}())};return n},o.prototype.data=function(t,n,o){if(t=t||"layui",o=o||localStorage,e.JSON&&e.JSON.parse){if(null===n)return delete o[t];n="object"==typeof n?n:{key:n};try{var r=JSON.parse(o[t])}catch(a){var r={}}return"value"in n&&(r[n.key]=n.value),n.remove&&delete r[n.key],o[t]=JSON.stringify(r),n.key?r[n.key]:r}},o.prototype.sessionData=function(e,t){return this.data(e,t,sessionStorage)},o.prototype.device=function(t){var n=navigator.userAgent.toLowerCase(),o=function(e){var t=new RegExp(e+"/([^\\s\\_\\-]+)");return e=(n.match(t)||[])[1],e||!1},r={os:function(){return/windows/.test(n)?"windows":/linux/.test(n)?"linux":/iphone|ipod|ipad|ios/.test(n)?"ios":/mac/.test(n)?"mac":void 0}(),ie:function(){return!!(e.ActiveXObject||"ActiveXObject"in e)&&((n.match(/msie\s(\d+)/)||[])[1]||"11")}(),weixin:o("micromessenger")};return t&&!r[t]&&(r[t]=o(t)),r.android=/android/.test(n),r.ios="ios"===r.os,r.mobile=!(!r.android&&!r.ios),r},o.prototype.hint=function(){return{error:a}},o.prototype.each=function(e,t){var n,o=this;if("function"!=typeof t)return o;if(e=e||[],e.constructor===Object){for(n in e)if(t.call(e[n],n,e[n]))break}else for(n=0;na?1:r= 4){
59 | gameOver = true;
60 | break;
61 | }
62 | try {
63 | java.net.URL url = new java.net.URL("http://api.ip.data5u.com/dynamic/get.html?order=" + order + "&ttl&random=true");
64 |
65 | HttpURLConnection connection = (HttpURLConnection)url.openConnection();
66 | connection.setConnectTimeout(3000);
67 | connection = (HttpURLConnection)url.openConnection();
68 |
69 | InputStream raw = connection.getInputStream();
70 | InputStream in = new BufferedInputStream(raw);
71 | byte[] data = new byte[in.available()];
72 | int bytesRead = 0;
73 | int offset = 0;
74 | while(offset < data.length) {
75 | bytesRead = in.read(data, offset, data.length - offset);
76 | if(bytesRead == -1) {
77 | break;
78 | }
79 | offset += bytesRead;
80 | }
81 | in.close();
82 | raw.close();
83 | String[] res = new String(data, StandardCharsets.UTF_8).split("\n");
84 | System.out.println(">>>>>>>>>>>>>>当前返回IP量 " + res[0]);
85 | Set ipport=new HashSet<>();
86 | ipport.add(res[0].substring(0, res[0].indexOf(",")));
87 | if (ipport.size()>50){
88 | break;
89 | }
90 | } catch (Exception e) {
91 | System.err.println(">>>>>>>>>>>>>>获取IP出错, " + e.getMessage());
92 | }
93 | try {
94 | Thread.sleep(sleepMs);
95 | } catch (InterruptedException e) {
96 | e.printStackTrace();
97 | }
98 | }
99 | }
100 | }
101 | public static void main(String[] args) {
102 | new Thread(new CodeCookieApplication().new GetIP(2 * 1000, 3,order , "https://www.zhipin.com/job_detail/?query=java&city=101230100&industry=&position=", false, 3, "https://www.zhipin.com/web/common/security-check.html?seed=b%2FEghb7hkDoTE%2F5jONnNN37vihlAhPuM%2FRePAMRJlv8%3D&name=725590d9&ts=1612771157772&callbackUrl=%2Fjob_detail%2F%3Fquery%3Djava%26city%3D101230100%26industry%3D%26position%3D&srcReferer=https%3A%2F%2Fwww.zhipin.com%2Fjob_detail%2F%3Fka%3Dheader-job", true, true)).start();
103 | }
104 |
105 | }
106 |
107 |
108 |
--------------------------------------------------------------------------------
/src/test/java/com/boss/spider/position/PositionApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.boss.spider.position;
2 |
3 | import com.boss.spider.position.dao.CookiesMapper;
4 | import com.boss.spider.position.dao.HotWordMapper;
5 | import com.boss.spider.position.dao.PositionMapper;
6 | import com.boss.spider.position.dao.SalaryViewMapper;
7 | import com.boss.spider.position.entity.HotWord;
8 | import com.boss.spider.position.entity.Position;
9 | import com.boss.spider.position.mongodb.InsertPositionMongo;
10 | import com.boss.spider.position.service.InsertCookiesService;
11 | import com.boss.spider.position.service.PositionService;
12 | import com.boss.spider.position.service.impl.InsertCookiesServiceImpl;
13 | import com.boss.spider.position.utils.BossPositionHandlerPositionUtil;
14 | import com.boss.spider.position.utils.BossSeedTSJsNameUtil;
15 | import com.boss.spider.position.utils.SalaryAnalysisUtil;
16 | import org.apache.http.HttpEntity;
17 | import org.apache.http.message.BasicHeader;
18 | import org.apache.http.util.EntityUtils;
19 | import org.jsoup.nodes.Element;
20 | import org.jsoup.select.Elements;
21 | import org.junit.jupiter.api.Test;
22 | import org.mybatis.spring.annotation.MapperScan;
23 | import org.openqa.selenium.WebDriver;
24 | import org.openqa.selenium.chrome.ChromeDriver;
25 | import org.openqa.selenium.chrome.ChromeOptions;
26 | import org.springframework.beans.factory.annotation.Autowired;
27 | import org.springframework.boot.test.context.SpringBootTest;
28 |
29 | import java.io.*;
30 | import java.net.URLEncoder;
31 | import java.util.ArrayList;
32 | import java.util.List;
33 |
34 | @SpringBootTest
35 | @MapperScan("com.boss.spider.position.dao")
36 | class PositionApplicationTests {
37 | private final static String[] _ZP_STOKENS={'登录cookie信息'};//美国号522
38 | @Autowired
39 | private InsertCookiesServiceImpl insertCookiesService;
40 | @Autowired
41 | InsertCookiesService insertCookiesServices;
42 | @Autowired
43 | HotWordMapper hotWordMapper;
44 | @Test
45 | public void cookieIsUseful() throws Exception {//+insertCookiesServices.findALL().get(0).getCookieValue()+
46 | String url="https://www.zhipin.com/c101230100/?query=java%E5%AE%9E%E4%B9%A0%E7%94%9F&ka=sel-salary-0";
47 | String url1="https://www.zhipin.com/c101280100/?query=java&page=1";
48 | List headers=new ArrayList<>();
49 | headers.add(new BasicHeader("user-agent", "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/84.0"));
50 | int i=(int) (Math.random()*_ZP_STOKENS.length);
51 | headers.add(new BasicHeader("referer", "https://www.zhipin.com/wapi/zpAntispam/verify/sliderNew?u=JfRD7m6yQ3wE&callbackUrl=http%3A%2F%2Fwww.zhipin.com%2Fjob_detail%2F%3Fka%3Dheader-job&fromUri=https%3A%2F%2Fwww.zhipin.com%2Fweb%2Fgeek%2Frecommend%3Frandom%3D1613384086541&p=IvdF9GS2TGsGRmszOA%7E%7E"));
52 | headers.add(new BasicHeader("cookie"," _bl_uid=vdkpRkL9fy5gz0us4c4L7qIwO644; Hm_lvt_194df3105ad7148dcf2b98a91b5e727a=1612429019,1612429816,1612529655,1612679694; __fid=d6ef1ccfc71f71822b602f2f41263a60; lastCity=100010000; __g=-; wt2=rGm3s0lsGMdbrKch; __l=l=%2Fwww.zhipin.com%2Fweb%2Fgeek%2Frecommend%3Frandom%3D1612679728962&s=3&friend_source=0; __c=1612679717; __a=23908512.1611752328.1612529658.1612679717.132.9.30.132; Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a=1612698004; __zp_stoken__=9d52bEFd0d0p3UkVMXApENVNnYl86UCdDdlIyd1pDDm1QKXBZflpJanobLn4MS2JuAntSV2xzLW4NDDsCeCFndRsnYkB7YBwPEXsUbC0VIxQibi4wRnsAVyBtQSN3GwJMBCpYbn9bLU5ndHJhBw%3D%3D"));
53 | // insertCookiesServices.DeleteById(insertCookiesServices.findALL().get(0).getCookieId());
54 | HttpEntity entity=BossPositionHandlerPositionUtil.httpGetHtml(url1,null,headers);
55 | String html=EntityUtils.toString(entity, "utf-8");
56 | System.out.println(html);
57 | System.out.println(i);
58 | System.out.println(BossPositionHandlerPositionUtil.getCompanyName(html));
59 | }
60 | @Test
61 | public void testCookie(){
62 | insertCookiesService.insertCookiesByTXT();
63 | }
64 | //测试职位关键词mapper
65 | @Test
66 | public void context(){
67 | System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
68 | ChromeOptions options=new ChromeOptions();
69 | options.addArguments("--proxy-server=http://"+"27.191.169.110:28554");
70 | WebDriver driver = new ChromeDriver(options);
71 | driver.get("https://www.zhipin.com/job_detail/?query=java&city=101230100&industry=&position=");
72 | }
73 | }
74 |
--------------------------------------------------------------------------------