20251124炳辰版本
This commit is contained in:
45
.gitignore
vendored
Normal file
45
.gitignore
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
HELP.md
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
!**/src/main/**
|
||||
!**/src/test/**
|
||||
|
||||
### STS ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
build/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
# front-end code
|
||||
src/main/resources/static/
|
||||
src/main/resources/templates/
|
||||
|
||||
# NGINX
|
||||
nginx/*
|
||||
!nginx/conf/
|
||||
|
||||
# application.properties
|
||||
src/main/resources/*.properties
|
||||
!src/main/resources/application.properties
|
||||
|
||||
static
|
||||
114
.mvn/wrapper/MavenWrapperDownloader.java
vendored
Normal file
114
.mvn/wrapper/MavenWrapperDownloader.java
vendored
Normal file
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.nio.channels.Channels;
|
||||
import java.nio.channels.ReadableByteChannel;
|
||||
import java.util.Properties;
|
||||
|
||||
public class MavenWrapperDownloader {
|
||||
|
||||
/**
|
||||
* Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
|
||||
*/
|
||||
private static final String DEFAULT_DOWNLOAD_URL =
|
||||
"https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar";
|
||||
|
||||
/**
|
||||
* Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
|
||||
* use instead of the default one.
|
||||
*/
|
||||
private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
|
||||
".mvn/wrapper/maven-wrapper.properties";
|
||||
|
||||
/**
|
||||
* Path where the maven-wrapper.jar will be saved to.
|
||||
*/
|
||||
private static final String MAVEN_WRAPPER_JAR_PATH =
|
||||
".mvn/wrapper/maven-wrapper.jar";
|
||||
|
||||
/**
|
||||
* Name of the property which should be used to override the default download url for the wrapper.
|
||||
*/
|
||||
private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
|
||||
|
||||
public static void main(String args[]) {
|
||||
System.out.println("- Downloader started");
|
||||
File baseDirectory = new File(args[0]);
|
||||
System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
|
||||
|
||||
// If the maven-wrapper.properties exists, read it and check if it contains a custom
|
||||
// wrapperUrl parameter.
|
||||
File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
|
||||
String url = DEFAULT_DOWNLOAD_URL;
|
||||
if(mavenWrapperPropertyFile.exists()) {
|
||||
FileInputStream mavenWrapperPropertyFileInputStream = null;
|
||||
try {
|
||||
mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
|
||||
Properties mavenWrapperProperties = new Properties();
|
||||
mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
|
||||
url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
|
||||
} catch (IOException e) {
|
||||
System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
|
||||
} finally {
|
||||
try {
|
||||
if(mavenWrapperPropertyFileInputStream != null) {
|
||||
mavenWrapperPropertyFileInputStream.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
// Ignore ...
|
||||
}
|
||||
}
|
||||
}
|
||||
System.out.println("- Downloading from: : " + url);
|
||||
|
||||
File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
|
||||
if(!outputFile.getParentFile().exists()) {
|
||||
if(!outputFile.getParentFile().mkdirs()) {
|
||||
System.out.println(
|
||||
"- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'");
|
||||
}
|
||||
}
|
||||
System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
|
||||
try {
|
||||
downloadFileFromURL(url, outputFile);
|
||||
System.out.println("Done");
|
||||
System.exit(0);
|
||||
} catch (Throwable e) {
|
||||
System.out.println("- Error downloading");
|
||||
e.printStackTrace();
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
private static void downloadFileFromURL(String urlString, File destination) throws Exception {
|
||||
URL website = new URL(urlString);
|
||||
ReadableByteChannel rbc;
|
||||
rbc = Channels.newChannel(website.openStream());
|
||||
FileOutputStream fos = new FileOutputStream(destination);
|
||||
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
|
||||
fos.close();
|
||||
rbc.close();
|
||||
}
|
||||
|
||||
}
|
||||
BIN
.mvn/wrapper/maven-wrapper.jar
vendored
Normal file
BIN
.mvn/wrapper/maven-wrapper.jar
vendored
Normal file
Binary file not shown.
1
.mvn/wrapper/maven-wrapper.properties
vendored
Normal file
1
.mvn/wrapper/maven-wrapper.properties
vendored
Normal file
@@ -0,0 +1 @@
|
||||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip
|
||||
9
Dockerfile
Normal file
9
Dockerfile
Normal file
@@ -0,0 +1,9 @@
|
||||
FROM openjdk:8-jdk-alpine
|
||||
|
||||
COPY ./target/*.jar app.jar
|
||||
|
||||
RUN mkdir -p /usr/local/data
|
||||
|
||||
VOLUME ["/usr/local/data"]
|
||||
|
||||
ENTRYPOINT ["java","-jar","/app.jar", "--spring.profiles.active=docker", "--postgres.host=db", "--static.file.path=/usr/local/data", "--mybatis.configuration.log-impl=org.apache.ibatis.logging.nologging.NoLoggingImpl"]
|
||||
4
ModifyLog.md
Normal file
4
ModifyLog.md
Normal file
@@ -0,0 +1,4 @@
|
||||
## 20250724 李伯钊
|
||||
1. 修改获取数据时,无法获取关联表及集合表中多媒体文件名的bug(本地没有图片,无法测试打包压缩)
|
||||
2. 修改Android写入或更新数据时,photo字段(Photo组件)只记录照片名,没有拼接路径的问题;同时将Android端下载数据的方法,给予了反操作
|
||||
3. [待完成] 需要对新、老数据库中全部的photo字段进行批量修改,以满足新代码的逻辑
|
||||
103
README.md
Normal file
103
README.md
Normal file
@@ -0,0 +1,103 @@
|
||||
天津移动巡查系统 + 湖北天地图数据采集更新系统的后端工程。
|
||||
|
||||
# 架构
|
||||
|
||||
后端工程是基于 Spring Boot 的单体应用,主要分为三层,
|
||||
|
||||
- 接口层:为客户端程序提供 API
|
||||
- 业务层:实现具体的业务逻辑
|
||||
- 数据层:缓存和持久化存储
|
||||
|
||||
## 接口层
|
||||
|
||||
目前只实现了 HTTP API,在代码中表现为各种各样的 `@RestContoller` 类。
|
||||
|
||||
## 业务层
|
||||
|
||||
因为早期开发时没有固定的规范,代码组织不够合理,业务逻辑的实现代码在 `@RestController` 类和 `@Service` 类中都有出现。
|
||||
|
||||
对一些比较重要的业务逻辑的介绍请见后文。
|
||||
|
||||
## 数据层
|
||||
|
||||
目前通过 PostgreSQL 进行数据化的持久化存储,并基于 Redis 实现了一个简单的缓存中间件。
|
||||
|
||||
# 业务流程
|
||||
|
||||
从整体上看,后端工程实现的业务逻辑比较复杂,这里只简单介绍主要业务流程所涉及的具体逻辑。目前只有湖北地图院将本系统投入到实际生产中,他们的业务流程包括以下部分:
|
||||
|
||||
1. 创建任务:管理员创建新任务,进行采集工具、底图、数据库等方面的配置;
|
||||
2. 创建数据库:管理员创建该任务对应的数据库,并导入初始数据;
|
||||
3. 分配任务:管理员为该任务指定外业人员,并根据作业区域、初始数据分布情况等条件进行任务分配;
|
||||
4. 开展外业:外业人员进行核查、采集等工作,并上传数据;
|
||||
5. 监管任务:管理员检查任务完成情况。
|
||||
|
||||
下面介绍各个环节的具体业务逻辑。
|
||||
|
||||
## 创建任务
|
||||
|
||||
目前实现了两种创建任务的方式:
|
||||
|
||||
- 管理员通过网页端进行各项配置,前端应用将配置项(组织成 JSON)发送给后端,后端据此创建配置文件和任务;
|
||||
- 管理员通过网页端上传配置文件,后端解析配置文件读取配置项,创建任务。
|
||||
|
||||
第一种方式的实现主要在 [`cn.edu.whu.boot.xml.controller.TaskManagementController#createTask`](src/main/java/cn/edu/whu/boot/xml/controller/TaskManagementController.java) 和 [`cn.edu.whu.boot.xml.service.impl.TaskServiceImpl#insertTaskAndXmlEnity`](src/main/java/cn/edu/whu/boot/xml/service/impl/TaskServiceImpl.java) 这两个方法中,第二种方式的实现主要在 [`cn.edu.whu.boot.xml.controller.TaskManagementController#createTaskByXmlFile`](src/main/java/cn/edu/whu/boot/xml/controller/TaskManagementController.java) 和 [`cn.edu.whu.boot.xml.service.impl.TaskServiceImpl#insertTaskAndXmlEnity`](src/main/java/cn/edu/whu/boot/xml/service/impl/TaskServiceImpl.java) 这两个方法中。
|
||||
|
||||
这两种实现都涉及到**配置文件**的读/写操作,具体代码在 [`cn.edu.whu.boot.xml.xmlreader.XmlTemplateReader`](src/main/java/cn/edu/whu/boot/xml/xmlreader/XmlTemplateReader.java) 类中。
|
||||
|
||||
## 创建数据库
|
||||
|
||||
管理员创建任务之后,还需要进行一次手动确认才能创建数据库。创建数据库的步骤为:
|
||||
|
||||
1. 在 PostgreSQL 中新建一个 schema,该任务相关的所有表都在该 schema 下;
|
||||
2. 在上一步新建的 schema 下创建表。
|
||||
|
||||
这一流程中执行的 SQL 语句都是**根据配置项动态生成的**,相关的代码主要在 [`cn.edu.whu.boot.xml.controller.DataBaseTableController#createTable`](src/main/java/cn/edu/whu/boot/xml/controller/DataBaseTableController.java)、[`cn.edu.whu.boot.xml.controller.DataBaseTableController#buildAllSqlString`](src/main/java/cn/edu/whu/boot/xml/controller/DataBaseTableController.java)、[`cn.edu.whu.boot.xml.service.impl.TableServiceImpl#createTableAndUpdateTask`](src/main/java/cn/edu/whu/boot/xml/service/impl/TableServiceImpl.java) 这些方法中。
|
||||
|
||||
管理员可以向表中导入 Shapefile 数据进行初始化,相关代码在 [`cn.edu.whu.boot.collection.controller.ImportController.shpDataMigration`](src/main/java/cn/edu/whu/boot/collection/controller/ImportController.java) 和 [`cn.edu.whu.boot.collection.service.impl.ImportServiceImpl.shpDataInsert`](src/main/java/cn/edu/whu/boot/collection/service/impl/ImportServiceImpl.java) 这两个方法中。
|
||||
|
||||
## 分配任务
|
||||
|
||||
管理员指定外业人员和上传工作区域 Shapefile 后,系统可自动进行任务分配,即将上一步中导入的数据按照一定的规则分配给外业人员,相关代码主要在 [`cn.edu.whu.boot.allocation.controllers.TaskController#assignCollectingTasks`](src/main/java/cn/edu/whu/boot/allocation/controllers/TaskController.java) 这个方法中。
|
||||
|
||||
任务自动分配的业务逻辑比较复杂,更具体的介绍可在[这一文档](docs/任务自动分配.md)中找到。
|
||||
|
||||
## 开展外业
|
||||
|
||||
外业人员核查/采集数据后会通过移动端程序上传数据,后端根据情况进行插入(INSERT)或更新(UPDATE)操作,相关代码在 [`cn.edu.whu.boot.collection.controller.BaseController#insertAndRecheckData`](src/main/java/cn/edu/whu/boot/collection/controller/BaseController.java)、[`cn.edu.whu.boot.collection.service.impl.BaseServiceImpl.insertData`](src/main/java/cn/edu/whu/boot/collection/service/impl/BaseServiceImpl.java)、[`cn.edu.whu.boot.collection.service.impl.BaseServiceImpl.updateRecheckData`](src/main/java/cn/edu/whu/boot/collection/service/impl/BaseServiceImpl.java) 这几个方法中。
|
||||
|
||||
## 监管任务
|
||||
|
||||
管理员可在网页端实时查看任务的进行情况,主要涉及到两类信息的查询:
|
||||
|
||||
- 任务进度,包括任务总量、已完成量、未完成量和每个外业人员的进度等,代码在 [`cn.edu.whu.boot.statistics.service.ReportService#countWorkloadByUser`](src/main/java/cn/edu/whu/boot/statistics/service/ReportService.java) 这个方法中。
|
||||
- 外业人员已上传的数据,相关的代码在 [`cn.edu.whu.boot.collection.controller.GetController#getDataByPageNum`](src/main/java/cn/edu/whu/boot/collection/controller/GetController.java) 和 [`cn.edu.whu.boot.collection.service.impl.SearchPageServiceImpl#getPageDataByWorkerAndStatus`](src/main/java/cn/edu/whu/boot/collection/service/impl/SearchPageServiceImpl.java) 这两个方法中;这个接口返回的数据中包含一个状态码字段(`status`),关于该字段含义的解释请见[这一文档](docs/数据状态码字段.md)。
|
||||
|
||||
# 部署
|
||||
|
||||
如果条件允许的话可以用 [Docker Compose](docker-compose.yaml) 进行部署,否则按顺序执行以下操作:
|
||||
|
||||
1. 安装所需的各种软件,包括 JDK 1.8、PostgreSQL (版本至少为 9.6)、 [Redis](https://github.com/microsoftarchive/redis/releases) 和 [NGINX](http://nginx.org/en/download.html);
|
||||
2. 创建数据库,名称为 `tj_project`,通过 `psql` 或其他工具执行 [`scheme.sql`](postgres/schema.sql) 和 [`tables.sql`](postgres/tables.sql) 这两个 SQL 文件,对数据库进行初始化设置;
|
||||
- 创建的数据库的名称如果不是 `tj_project`,需要相应地修改 [`scheme.sql`](postgres/schema.sql) 和 [`tables.sql`](postgres/tables.sql) 文件开头 `\c` 命令的参数
|
||||
3. 运行 `redis-server.exe`,启动 Redis 服务;
|
||||
4. 修改 [`application.properties`](src/main/resources/application.properties) 中数据库用户名和密码、静态资源存储路径等参数,将后端工程打包成 JAR 文件后启动即可;也可先打包,启动时再通过命令行传入相关参数;
|
||||
- 最方便的方法是写一个启动脚本,把所需的参数写在脚本内,然后直接通过脚本来启动程序,下面是一个 Windows 脚本的示例:
|
||||
|
||||
```
|
||||
java -jar <jar 文件路径> --server.port=9001
|
||||
```
|
||||
- 如果编写了启动脚本,还可以将脚本的快捷方式放在 Startup 目录下(执行 `shell:common startup` 命令可打开该目录),这样系统重启时后端工程也会跟着重启
|
||||
5. 将[这个文件](nginx/conf/nginx.conf)作为模板配置 Nginx,然后运行 `nginx.exe` 启动 NGINX 服务器。
|
||||
|
||||
|
||||
## 将 NGINX 和 Redis 注册为 Windows 服务
|
||||
|
||||
1. 关闭正在运行的 NGINX(通过 `nginx.exe -s stop` 命令关闭) 和 Redis 实例;
|
||||
2. 下载并解压 [NSSM](http://nssm.cc/download),以管理员身份在相应的解压目录下启动一个 Powershell 窗口,执行命令 `nssm install`,将 `nginx.exe` 和 `redis-server.exe` 注册为 Windows 服务;
|
||||
3. 通过 [`Start-Service`](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-service?view=powershell-7.2) 命令启动服务:
|
||||
|
||||
```powershell
|
||||
> Start-Service "nginx"
|
||||
> Start-Service "redis"
|
||||
```
|
||||
41
docker-compose.yaml
Normal file
41
docker-compose.yaml
Normal file
@@ -0,0 +1,41 @@
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
backend:
|
||||
build: .
|
||||
container_name: tj-project-app
|
||||
ports:
|
||||
- 9001:9000
|
||||
restart: always
|
||||
volumes:
|
||||
- ./mount/backend:/usr/local/data
|
||||
networks:
|
||||
- spring-postgres
|
||||
depends_on:
|
||||
- db
|
||||
- redis
|
||||
db:
|
||||
build: ./postgres
|
||||
container_name: tj-project-db
|
||||
ports:
|
||||
- 5433:5432
|
||||
restart: always
|
||||
volumes:
|
||||
- ./mount/db:/var/lib/postgresql/data
|
||||
networks:
|
||||
- spring-postgres
|
||||
environment:
|
||||
- POSTGRES_DB=tj_project
|
||||
- POSTGRES_PASSWORD=admin503
|
||||
redis:
|
||||
image: redis
|
||||
container_name: tj-project-redis
|
||||
volumes:
|
||||
- ./mount/redis:/usr/local/etc/redis
|
||||
expose:
|
||||
- 6379
|
||||
networks:
|
||||
- spring-postgres
|
||||
|
||||
networks:
|
||||
spring-postgres:
|
||||
23
docs/任务自动分配.md
Normal file
23
docs/任务自动分配.md
Normal file
@@ -0,0 +1,23 @@
|
||||
从总体上看,任务自动分配可以分为两部分,一个是分配工作区域,另一个是分配数据。
|
||||
|
||||
# 分配工作区域
|
||||
|
||||
目前工作工作区域分配的前提是用户已经上传了包含整个工作区域信息的 Shapefile。
|
||||
|
||||
如果用户设置了 [Geohash](https://halfrost.com/go_spatial_search/) 精度,将整个工作区域的外接矩形按照用户选择的精度划分为若干个 Geohash 网格(如果按照用户选择的精度划分出的网格数量小于外业人员数量,则尝试将精度加 1 后再次划分),然后将这些网格尽可能平均地分配给外业人员。
|
||||
|
||||
如果用户没有指定 Geohash 精度,则按照以下方法将 Shapefile 中的多边形分配给外业人员:
|
||||
|
||||
1. 如果多边形数量等于外业人员数量,随机分配;
|
||||
2. 如果多边形数量大于 1 但小于外业人员数量,以多边形的面积为权重进行分配,即多边形的面积越大,分配到的人员数量就越多;
|
||||
3. 如果多边形数量大于外业人员数量,对多边形进行 k-means 聚类,类簇数量等于外业人员数量,然后随机分配每个类簇;
|
||||
4. 如果只有一个多边形而且外业人员数量大于 1,将这个多边形的外接矩形按照合适的 Geohash 精度划分为若干个网格,然后将这些网格尽可能平均地分配给外业人员;确定 Geohash 精度的原则是保证划分后得到的网格数量不小于外业人员数量。
|
||||
|
||||
# 分配数据
|
||||
|
||||
如果用户提前导入了一些数据,则需要按照以下方法分配数据:
|
||||
|
||||
1. 如果只有一个外业人员,将所有数据都分配给该人员;
|
||||
2. 如果外业人员数量大于 1,首先计算每个数据的质心(坐标相同的质心只保留一个),然后按照以下方法分配:
|
||||
1. 如果质心数量小于外业人员数量,将所有数据尽可能平均地分配给外业人员;
|
||||
2. 否则,将质心进行聚类,类簇数量等于外业人员数量,然后随机分配每个类簇。
|
||||
35
docs/数据状态码字段.md
Normal file
35
docs/数据状态码字段.md
Normal file
@@ -0,0 +1,35 @@
|
||||
在数据库中,每条数据都有 3 个字段:
|
||||
|
||||
- `collector`:这条数据的上传者的 ID;
|
||||
- `reviewer`:需要到实地对这条数据进行**核查**的外业人员的 ID,大多数情况下 `collector != reviewer`;
|
||||
- `status`:状态字段。
|
||||
|
||||
将这 3 个字段结合起来分析,可以识别一条数据在整个工作流程中当前所处的阶段。
|
||||
|
||||
一条数据从被导入数据库中到被核查,会经历以下 3 个阶段:
|
||||
|
||||
| collector | reviewer | status | 阶段 |
|
||||
| --------- |----------| ------ |---------------------|
|
||||
| -1 | -1 | 0 | 数据刚被导入到数据库中 |
|
||||
| -1 | A | 0 | 管理员将数据分配给外业人员 A |
|
||||
| -1 | A | 1 | 外业人员 A 已经在实地核查过这条数据 |
|
||||
|
||||
如果一条数据原本不在数据库中(即所谓的“新增”数据),那么它从被上传到被核查,会经历以下 3 个阶段:
|
||||
|
||||
| collector | reviewer | status | 阶段 |
|
||||
|-----------|----------|--------|---------------------|
|
||||
| A | -1 | 1 | 外业人员 A 上传了这条数据 |
|
||||
| A | B | 0 | 管理员将数据分配给外业人员 B |
|
||||
| A | B | 1 | 外业人员 B 已经在实地核查过这条数据 |
|
||||
|
||||
管理员还可以在网页端对**已经被外业人员核查过的数据**进行审核,如果管理员认为数据没问题,则标记为审核通过:
|
||||
|
||||
| status |
|
||||
|--------|
|
||||
| 2 |
|
||||
|
||||
如果管理员将数据标记为审核未通过:
|
||||
|
||||
| status |
|
||||
|--------|
|
||||
| -1 |
|
||||
0
environment_check.sh
Normal file
0
environment_check.sh
Normal file
427
hs_err_pid15872.log
Normal file
427
hs_err_pid15872.log
Normal file
@@ -0,0 +1,427 @@
|
||||
#
|
||||
# A fatal error has been detected by the Java Runtime Environment:
|
||||
#
|
||||
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000000000000, pid=15872, tid=0x0000000000003de0
|
||||
#
|
||||
# JRE version: Java(TM) SE Runtime Environment (8.0_201-b09) (build 1.8.0_201-b09)
|
||||
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.201-b09 mixed mode windows-amd64 compressed oops)
|
||||
# Problematic frame:
|
||||
# C 0x0000000000000000
|
||||
#
|
||||
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
|
||||
#
|
||||
# If you would like to submit a bug report, please visit:
|
||||
# http://bugreport.java.com/bugreport/crash.jsp
|
||||
#
|
||||
|
||||
--------------- T H R E A D ---------------
|
||||
|
||||
Current thread (0x000000002752a800): VMThread [stack: 0x000000002bca0000,0x000000002bda0000] [id=15840]
|
||||
|
||||
siginfo: ExceptionCode=0xc0000005, ExceptionInformation=0x0000000000000008 0x0000000000000000
|
||||
|
||||
Registers:
|
||||
RAX=0x000000002f9e8450, RBX=0x00000000373ad4c0, RCX=0x000000003749b0f0, RDX=0x0000000000000000
|
||||
RSP=0x000000002bd9edb8, RBP=0x00007ffbedd4ed40, RSI=0x0000000000000002, RDI=0x000000002fa2c450
|
||||
R8 =0x000000002bd9edf0, R9 =0x00007ffc2892c848, R10=0x0000000000000004, R11=0x000000002bd9edf0
|
||||
R12=0x00007ffbeda57908, R13=0x0000000003601658, R14=0x0000000000000000, R15=0x0000000000000001
|
||||
RIP=0x0000000000000000, EFLAGS=0x0000000000010206
|
||||
|
||||
Top of Stack: (sp=0x000000002bd9edb8)
|
||||
0x000000002bd9edb8: 00007ffbd0deb263 00007ffbedd4ed40
|
||||
0x000000002bd9edc8: 0000000000000000 0000000000000000
|
||||
0x000000002bd9edd8: 0000000000000000 000000002bd9ee50
|
||||
0x000000002bd9ede8: 00007ffc2890930e 0000000000000000
|
||||
0x000000002bd9edf8: 0000000000000000 0000000003601658
|
||||
0x000000002bd9ee08: 00007ffbeda57908 000000002fa2c450
|
||||
0x000000002bd9ee18: 00007ffc288f6462 0000000000000000
|
||||
0x000000002bd9ee28: 0000000000000000 0000000000000002
|
||||
0x000000002bd9ee38: 00007ffc4d5347b1 0000000000000000
|
||||
0x000000002bd9ee48: 00007ffc4b43f05b 000000002fa0a660
|
||||
0x000000002bd9ee58: 00007ffc289266e0 00007ffb00000078
|
||||
0x000000002bd9ee68: 00000000373b32d0 000000002faf8a40
|
||||
0x000000002bd9ee78: 00007ffc288f9a44 0000000000000001
|
||||
0x000000002bd9ee88: 00007ffbedd4ed40 000000002faf8b98
|
||||
0x000000002bd9ee98: 000000002fa2c450 00000000373cbab0
|
||||
0x000000002bd9eea8: 00007ffbed7f7e04 000000002fa30630
|
||||
|
||||
Instructions: (pc=0x0000000000000000)
|
||||
0xffffffffffffffe0:
|
||||
|
||||
|
||||
Register to memory mapping:
|
||||
|
||||
RAX=0x000000002f9e8450 is an unknown value
|
||||
RBX=0x00000000373ad4c0 is an unknown value
|
||||
RCX=0x000000003749b0f0 is an unknown value
|
||||
RDX=0x0000000000000000 is an unknown value
|
||||
RSP=0x000000002bd9edb8 is an unknown value
|
||||
RBP=0x00007ffbedd4ed40 is an unknown value
|
||||
RSI=0x0000000000000002 is an unknown value
|
||||
RDI=0x000000002fa2c450 is an unknown value
|
||||
R8 =0x000000002bd9edf0 is an unknown value
|
||||
R9 =0x00007ffc2892c848 is an unknown value
|
||||
R10=0x0000000000000004 is an unknown value
|
||||
R11=0x000000002bd9edf0 is an unknown value
|
||||
R12=0x00007ffbeda57908 is an unknown value
|
||||
R13=0x0000000003601658 is an unknown value
|
||||
R14=0x0000000000000000 is an unknown value
|
||||
R15=0x0000000000000001 is an unknown value
|
||||
|
||||
|
||||
Stack: [0x000000002bca0000,0x000000002bda0000], sp=0x000000002bd9edb8, free space=1019k
|
||||
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
|
||||
|
||||
VM_Operation (0x00000000385aee20): Exit, mode: safepoint, requested by thread 0x000000002e197000
|
||||
|
||||
|
||||
--------------- P R O C E S S ---------------
|
||||
|
||||
Java Threads: ( => current thread )
|
||||
0x00000000317bb000 JavaThread "globalEventExecutor-2-2" [_thread_blocked, id=708, stack(0x0000000034390000,0x0000000034490000)]
|
||||
0x000000002e197000 JavaThread "SIGINT handler" daemon [_thread_blocked, id=6716, stack(0x00000000384b0000,0x00000000385b0000)]
|
||||
0x00000000317c4000 JavaThread "FeatureNativeObjectsCleaner" daemon [_thread_blocked, id=15080, stack(0x0000000037aa0000,0x0000000037ba0000)]
|
||||
0x00000000317c5800 JavaThread "GeometryNativeObjectsCleaner" daemon [_thread_blocked, id=16292, stack(0x00000000379a0000,0x0000000037aa0000)]
|
||||
0x00000000317bf800 JavaThread "RMI TCP Connection(2)-192.168.1.32" daemon [_thread_in_native, id=2864, stack(0x0000000034790000,0x0000000034890000)]
|
||||
0x00000000317c2800 JavaThread "DestroyJavaVM" [_thread_blocked, id=16052, stack(0x0000000003610000,0x0000000003710000)]
|
||||
0x000000002db6c000 JavaThread "JMX server connection timeout 24" daemon [_thread_blocked, id=8940, stack(0x000000002ef80000,0x000000002f080000)]
|
||||
0x000000002db68800 JavaThread "RMI Scheduler(0)" daemon [_thread_blocked, id=5980, stack(0x000000002ee80000,0x000000002ef80000)]
|
||||
0x000000002db55800 JavaThread "RMI TCP Connection(1)-192.168.1.32" daemon [_thread_in_native, id=9632, stack(0x000000002ed80000,0x000000002ee80000)]
|
||||
0x000000002d9a4000 JavaThread "RMI TCP Accept-0" daemon [_thread_in_native, id=12188, stack(0x000000002e8d0000,0x000000002e9d0000)]
|
||||
0x000000002c87a800 JavaThread "Service Thread" daemon [_thread_blocked, id=9496, stack(0x000000002d800000,0x000000002d900000)]
|
||||
0x000000002c77b000 JavaThread "C1 CompilerThread11" daemon [_thread_blocked, id=10228, stack(0x000000002d700000,0x000000002d800000)]
|
||||
0x000000002c772000 JavaThread "C1 CompilerThread10" daemon [_thread_blocked, id=2164, stack(0x000000002d600000,0x000000002d700000)]
|
||||
0x000000002c767800 JavaThread "C1 CompilerThread9" daemon [_thread_blocked, id=32, stack(0x000000002d500000,0x000000002d600000)]
|
||||
0x000000002c764800 JavaThread "C1 CompilerThread8" daemon [_thread_blocked, id=8956, stack(0x000000002d400000,0x000000002d500000)]
|
||||
0x000000002995d800 JavaThread "C2 CompilerThread7" daemon [_thread_blocked, id=17204, stack(0x000000002d300000,0x000000002d400000)]
|
||||
0x000000002c760000 JavaThread "C2 CompilerThread6" daemon [_thread_blocked, id=6016, stack(0x000000002d200000,0x000000002d300000)]
|
||||
0x000000002995d000 JavaThread "C2 CompilerThread5" daemon [_thread_blocked, id=10216, stack(0x000000002d000000,0x000000002d100000)]
|
||||
0x000000002995a000 JavaThread "C2 CompilerThread4" daemon [_thread_blocked, id=6480, stack(0x000000002cf00000,0x000000002d000000)]
|
||||
0x000000002c74e800 JavaThread "C2 CompilerThread3" daemon [_thread_blocked, id=18876, stack(0x000000002ce00000,0x000000002cf00000)]
|
||||
0x000000002c74e000 JavaThread "C2 CompilerThread2" daemon [_thread_blocked, id=17036, stack(0x000000002cd00000,0x000000002ce00000)]
|
||||
0x000000002c74d000 JavaThread "C2 CompilerThread1" daemon [_thread_blocked, id=13880, stack(0x000000002cc00000,0x000000002cd00000)]
|
||||
0x000000002c74b800 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=9560, stack(0x000000002cb00000,0x000000002cc00000)]
|
||||
0x000000002c75d000 JavaThread "Monitor Ctrl-Break" daemon [_thread_in_native, id=2404, stack(0x000000002ca00000,0x000000002cb00000)]
|
||||
0x0000000029744800 JavaThread "Attach Listener" daemon [_thread_blocked, id=19132, stack(0x000000002c100000,0x000000002c200000)]
|
||||
0x000000002979d800 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=14440, stack(0x000000002c000000,0x000000002c100000)]
|
||||
0x000000002972a000 JavaThread "Finalizer" daemon [_thread_blocked, id=16324, stack(0x000000002bea0000,0x000000002bfa0000)]
|
||||
0x0000000029729000 JavaThread "Reference Handler" daemon [_thread_blocked, id=8052, stack(0x000000002bda0000,0x000000002bea0000)]
|
||||
|
||||
Other Threads:
|
||||
=>0x000000002752a800 VMThread [stack: 0x000000002bca0000,0x000000002bda0000] [id=15840]
|
||||
|
||||
VM state:at safepoint (shutting down)
|
||||
|
||||
VM Mutex/Monitor currently owned by a thread: ([mutex/lock_event])
|
||||
[0x0000000003710e50] Threads_lock - owner thread: 0x000000002752a800
|
||||
|
||||
heap address: 0x00000005c3400000, size: 8140 MB, Compressed Oops mode: Zero based, Oop shift amount: 3
|
||||
Narrow klass base: 0x0000000000000000, Narrow klass shift: 3
|
||||
Compressed class space size: 1073741824 Address: 0x00000007c0000000
|
||||
|
||||
Heap:
|
||||
PSYoungGen total 425472K, used 131639K [0x0000000716700000, 0x0000000732300000, 0x00000007c0000000)
|
||||
eden space 404480K, 32% used [0x0000000716700000,0x000000071e78dc80,0x000000072f200000)
|
||||
from space 20992K, 0% used [0x0000000730e80000,0x0000000730e80000,0x0000000732300000)
|
||||
to space 25088K, 0% used [0x000000072f200000,0x000000072f200000,0x0000000730a80000)
|
||||
ParOldGen total 599552K, used 32010K [0x00000005c3400000, 0x00000005e7d80000, 0x0000000716700000)
|
||||
object space 599552K, 5% used [0x00000005c3400000,0x00000005c53428b8,0x00000005e7d80000)
|
||||
Metaspace used 60029K, capacity 63176K, committed 63256K, reserved 1103872K
|
||||
class space used 7368K, capacity 7950K, committed 7984K, reserved 1048576K
|
||||
|
||||
Card table byte_map: [0x0000000012dc0000,0x0000000013db0000] byte_map_base: 0x000000000ffa6000
|
||||
|
||||
Marking Bits: (ParMarkBitMap*) 0x000000006a8a4ce0
|
||||
Begin Bits: [0x0000000015c50000, 0x000000001db80000)
|
||||
End Bits: [0x000000001db80000, 0x0000000025ab0000)
|
||||
|
||||
Polling page: 0x0000000001710000
|
||||
|
||||
CodeCache: size=245760Kb used=14111Kb max_used=14194Kb free=231648Kb
|
||||
bounds [0x0000000003a00000, 0x00000000047e0000, 0x0000000012a00000]
|
||||
total_blobs=7102 nmethods=6344 adapters=666
|
||||
compilation: enabled
|
||||
|
||||
Compilation events (10 events):
|
||||
Event: 15.649 Thread 0x000000002c764800 6372 1 java.util.concurrent.locks.AbstractQueuedSynchronizer$Node::predecessor (19 bytes)
|
||||
Event: 15.649 Thread 0x000000002c764800 nmethod 6372 0x00000000047dbe50 code [0x00000000047dbfc0, 0x00000000047dc188]
|
||||
Event: 15.649 Thread 0x000000002c767800 6373 1 java.util.concurrent.atomic.AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl::accessCheck (17 bytes)
|
||||
Event: 15.649 Thread 0x000000002c767800 nmethod 6373 0x00000000047dc250 code [0x00000000047dc3c0, 0x00000000047dc528]
|
||||
Event: 15.649 Thread 0x000000002c772000 6374 ! 1 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry::destroyBean (385 bytes)
|
||||
Event: 15.649 Thread 0x000000002c77b000 6375 1 io.netty.util.concurrent.SingleThreadEventExecutor::fetchFromScheduledTaskQueue (69 bytes)
|
||||
Event: 15.649 Thread 0x000000002c77b000 nmethod 6375 0x00000000047dc5d0 code [0x00000000047dc760, 0x00000000047dc9f8]
|
||||
Event: 15.650 Thread 0x000000002c772000 nmethod 6374 0x0000000003d1a790 code [0x0000000003d1ab20, 0x0000000003d1bcd8]
|
||||
Event: 15.650 Thread 0x000000002c764800 6376 1 java.util.concurrent.locks.ReentrantLock$Sync::isHeldExclusively (16 bytes)
|
||||
Event: 15.650 Thread 0x000000002c764800 nmethod 6376 0x0000000003d05810 code [0x0000000003d05960, 0x0000000003d05a90]
|
||||
|
||||
GC Heap History (10 events):
|
||||
Event: 1.126 GC heap before
|
||||
{Heap before GC invocations=5 (full 1):
|
||||
PSYoungGen total 283648K, used 172335K [0x0000000716700000, 0x000000072e100000, 0x00000007c0000000)
|
||||
eden space 262144K, 62% used [0x0000000716700000,0x000000072073ed58,0x0000000726700000)
|
||||
from space 21504K, 38% used [0x0000000726700000,0x0000000726f0d1e0,0x0000000727c00000)
|
||||
to space 21504K, 0% used [0x000000072cc00000,0x000000072cc00000,0x000000072e100000)
|
||||
ParOldGen total 225792K, used 9890K [0x00000005c3400000, 0x00000005d1080000, 0x0000000716700000)
|
||||
object space 225792K, 4% used [0x00000005c3400000,0x00000005c3da8948,0x00000005d1080000)
|
||||
Metaspace used 34086K, capacity 35470K, committed 35496K, reserved 1079296K
|
||||
class space used 4463K, capacity 4782K, committed 4784K, reserved 1048576K
|
||||
Event: 1.130 GC heap after
|
||||
Heap after GC invocations=5 (full 1):
|
||||
PSYoungGen total 359424K, used 13394K [0x0000000716700000, 0x000000072de00000, 0x00000007c0000000)
|
||||
eden space 340992K, 0% used [0x0000000716700000,0x0000000716700000,0x000000072b400000)
|
||||
from space 18432K, 72% used [0x000000072cc00000,0x000000072d914860,0x000000072de00000)
|
||||
to space 21504K, 0% used [0x000000072b400000,0x000000072b400000,0x000000072c900000)
|
||||
ParOldGen total 225792K, used 9970K [0x00000005c3400000, 0x00000005d1080000, 0x0000000716700000)
|
||||
object space 225792K, 4% used [0x00000005c3400000,0x00000005c3dbc958,0x00000005d1080000)
|
||||
Metaspace used 34086K, capacity 35470K, committed 35496K, reserved 1079296K
|
||||
class space used 4463K, capacity 4782K, committed 4784K, reserved 1048576K
|
||||
}
|
||||
Event: 1.130 GC heap before
|
||||
{Heap before GC invocations=6 (full 2):
|
||||
PSYoungGen total 359424K, used 13394K [0x0000000716700000, 0x000000072de00000, 0x00000007c0000000)
|
||||
eden space 340992K, 0% used [0x0000000716700000,0x0000000716700000,0x000000072b400000)
|
||||
from space 18432K, 72% used [0x000000072cc00000,0x000000072d914860,0x000000072de00000)
|
||||
to space 21504K, 0% used [0x000000072b400000,0x000000072b400000,0x000000072c900000)
|
||||
ParOldGen total 225792K, used 9970K [0x00000005c3400000, 0x00000005d1080000, 0x0000000716700000)
|
||||
object space 225792K, 4% used [0x00000005c3400000,0x00000005c3dbc958,0x00000005d1080000)
|
||||
Metaspace used 34086K, capacity 35470K, committed 35496K, reserved 1079296K
|
||||
class space used 4463K, capacity 4782K, committed 4784K, reserved 1048576K
|
||||
Event: 1.180 GC heap after
|
||||
Heap after GC invocations=6 (full 2):
|
||||
PSYoungGen total 359424K, used 0K [0x0000000716700000, 0x000000072de00000, 0x00000007c0000000)
|
||||
eden space 340992K, 0% used [0x0000000716700000,0x0000000716700000,0x000000072b400000)
|
||||
from space 18432K, 0% used [0x000000072cc00000,0x000000072cc00000,0x000000072de00000)
|
||||
to space 21504K, 0% used [0x000000072b400000,0x000000072b400000,0x000000072c900000)
|
||||
ParOldGen total 402432K, used 19607K [0x00000005c3400000, 0x00000005dbd00000, 0x0000000716700000)
|
||||
object space 402432K, 4% used [0x00000005c3400000,0x00000005c4725da8,0x00000005dbd00000)
|
||||
Metaspace used 34086K, capacity 35470K, committed 35496K, reserved 1079296K
|
||||
class space used 4463K, capacity 4782K, committed 4784K, reserved 1048576K
|
||||
}
|
||||
Event: 2.001 GC heap before
|
||||
{Heap before GC invocations=7 (full 2):
|
||||
PSYoungGen total 359424K, used 340992K [0x0000000716700000, 0x000000072de00000, 0x00000007c0000000)
|
||||
eden space 340992K, 100% used [0x0000000716700000,0x000000072b400000,0x000000072b400000)
|
||||
from space 18432K, 0% used [0x000000072cc00000,0x000000072cc00000,0x000000072de00000)
|
||||
to space 21504K, 0% used [0x000000072b400000,0x000000072b400000,0x000000072c900000)
|
||||
ParOldGen total 402432K, used 19607K [0x00000005c3400000, 0x00000005dbd00000, 0x0000000716700000)
|
||||
object space 402432K, 4% used [0x00000005c3400000,0x00000005c4725da8,0x00000005dbd00000)
|
||||
Metaspace used 49819K, capacity 52484K, committed 52648K, reserved 1095680K
|
||||
class space used 6275K, capacity 6791K, committed 6832K, reserved 1048576K
|
||||
Event: 2.009 GC heap after
|
||||
Heap after GC invocations=7 (full 2):
|
||||
PSYoungGen total 362496K, used 21482K [0x0000000716700000, 0x0000000732500000, 0x00000007c0000000)
|
||||
eden space 340992K, 0% used [0x0000000716700000,0x0000000716700000,0x000000072b400000)
|
||||
from space 21504K, 99% used [0x000000072b400000,0x000000072c8faa00,0x000000072c900000)
|
||||
to space 23040K, 0% used [0x0000000730e80000,0x0000000730e80000,0x0000000732500000)
|
||||
ParOldGen total 402432K, used 21364K [0x00000005c3400000, 0x00000005dbd00000, 0x0000000716700000)
|
||||
object space 402432K, 5% used [0x00000005c3400000,0x00000005c48dd370,0x00000005dbd00000)
|
||||
Metaspace used 49819K, capacity 52484K, committed 52648K, reserved 1095680K
|
||||
class space used 6275K, capacity 6791K, committed 6832K, reserved 1048576K
|
||||
}
|
||||
Event: 2.671 GC heap before
|
||||
{Heap before GC invocations=8 (full 2):
|
||||
PSYoungGen total 362496K, used 210703K [0x0000000716700000, 0x0000000732500000, 0x00000007c0000000)
|
||||
eden space 340992K, 55% used [0x0000000716700000,0x0000000721fc94f8,0x000000072b400000)
|
||||
from space 21504K, 99% used [0x000000072b400000,0x000000072c8faa00,0x000000072c900000)
|
||||
to space 23040K, 0% used [0x0000000730e80000,0x0000000730e80000,0x0000000732500000)
|
||||
ParOldGen total 402432K, used 21364K [0x00000005c3400000, 0x00000005dbd00000, 0x0000000716700000)
|
||||
object space 402432K, 5% used [0x00000005c3400000,0x00000005c48dd370,0x00000005dbd00000)
|
||||
Metaspace used 56205K, capacity 59076K, committed 59160K, reserved 1101824K
|
||||
class space used 6888K, capacity 7435K, committed 7472K, reserved 1048576K
|
||||
Event: 2.677 GC heap after
|
||||
Heap after GC invocations=8 (full 2):
|
||||
PSYoungGen total 425472K, used 20137K [0x0000000716700000, 0x0000000732300000, 0x00000007c0000000)
|
||||
eden space 404480K, 0% used [0x0000000716700000,0x0000000716700000,0x000000072f200000)
|
||||
from space 20992K, 95% used [0x0000000730e80000,0x000000073222a4e8,0x0000000732300000)
|
||||
to space 25088K, 0% used [0x000000072f200000,0x000000072f200000,0x0000000730a80000)
|
||||
ParOldGen total 402432K, used 21372K [0x00000005c3400000, 0x00000005dbd00000, 0x0000000716700000)
|
||||
object space 402432K, 5% used [0x00000005c3400000,0x00000005c48df370,0x00000005dbd00000)
|
||||
Metaspace used 56205K, capacity 59076K, committed 59160K, reserved 1101824K
|
||||
class space used 6888K, capacity 7435K, committed 7472K, reserved 1048576K
|
||||
}
|
||||
Event: 2.677 GC heap before
|
||||
{Heap before GC invocations=9 (full 3):
|
||||
PSYoungGen total 425472K, used 20137K [0x0000000716700000, 0x0000000732300000, 0x00000007c0000000)
|
||||
eden space 404480K, 0% used [0x0000000716700000,0x0000000716700000,0x000000072f200000)
|
||||
from space 20992K, 95% used [0x0000000730e80000,0x000000073222a4e8,0x0000000732300000)
|
||||
to space 25088K, 0% used [0x000000072f200000,0x000000072f200000,0x0000000730a80000)
|
||||
ParOldGen total 402432K, used 21372K [0x00000005c3400000, 0x00000005dbd00000, 0x0000000716700000)
|
||||
object space 402432K, 5% used [0x00000005c3400000,0x00000005c48df370,0x00000005dbd00000)
|
||||
Metaspace used 56205K, capacity 59076K, committed 59160K, reserved 1101824K
|
||||
class space used 6888K, capacity 7435K, committed 7472K, reserved 1048576K
|
||||
Event: 2.745 GC heap after
|
||||
Heap after GC invocations=9 (full 3):
|
||||
PSYoungGen total 425472K, used 0K [0x0000000716700000, 0x0000000732300000, 0x00000007c0000000)
|
||||
eden space 404480K, 0% used [0x0000000716700000,0x0000000716700000,0x000000072f200000)
|
||||
from space 20992K, 0% used [0x0000000730e80000,0x0000000730e80000,0x0000000732300000)
|
||||
to space 25088K, 0% used [0x000000072f200000,0x000000072f200000,0x0000000730a80000)
|
||||
ParOldGen total 599552K, used 32010K [0x00000005c3400000, 0x00000005e7d80000, 0x0000000716700000)
|
||||
object space 599552K, 5% used [0x00000005c3400000,0x00000005c53428b8,0x00000005e7d80000)
|
||||
Metaspace used 56205K, capacity 59076K, committed 59160K, reserved 1101824K
|
||||
class space used 6888K, capacity 7435K, committed 7472K, reserved 1048576K
|
||||
}
|
||||
|
||||
Deoptimization events (0 events):
|
||||
No events
|
||||
|
||||
Classes redefined (0 events):
|
||||
No events
|
||||
|
||||
Internal exceptions (10 events):
|
||||
Event: 2.819 Thread 0x000000002e29b800 Exception <a 'java/lang/ArrayIndexOutOfBoundsException'> (0x0000000718461928) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\runtime\sharedRuntime.cpp, line 605]
|
||||
Event: 3.158 Thread 0x000000002e29b800 Exception <a 'java/lang/ArrayIndexOutOfBoundsException'> (0x00000007188b8760) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\runtime\sharedRuntime.cpp, line 605]
|
||||
Event: 3.266 Thread 0x000000002e29b800 Exception <a 'java/lang/reflect/InvocationTargetException'> (0x00000007190894f8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\runtime\reflection.cpp, line 1092]
|
||||
Event: 3.269 Thread 0x000000002e29b800 Exception <a 'java/lang/ArrayIndexOutOfBoundsException'> (0x0000000719130938) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\runtime\sharedRuntime.cpp, line 605]
|
||||
Event: 3.269 Thread 0x000000002e29b800 Exception <a 'java/lang/ArrayIndexOutOfBoundsException'> (0x0000000719131a60) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\runtime\sharedRuntime.cpp, line 605]
|
||||
Event: 3.270 Thread 0x000000002e29b800 Exception <a 'java/lang/ArrayIndexOutOfBoundsException'> (0x00000007191a7c00) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\runtime\sharedRuntime.cpp, line 605]
|
||||
Event: 15.431 Thread 0x000000002c258800 Exception <a 'java/lang/InterruptedException': sleep interrupted> (0x000000071aff4e68) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\prims\jvm.cpp, line 3340]
|
||||
Event: 15.435 Thread 0x000000002e197800 Exception <a 'java/lang/NoSuchMethodError': java.lang.Object.lambda$toStream$0(Ljava/util/Optional;)Ljava/util/stream/Stream;> (0x000000071b7961c0) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\interpreter\l
|
||||
Event: 15.435 Thread 0x000000002e197800 Exception <a 'java/lang/NoSuchMethodError': java.lang.Object.of(Ljava/lang/Object;)Ljava/util/stream/Stream;> (0x000000071b79c368) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\interpreter\linkResolver.cpp,
|
||||
Event: 15.435 Thread 0x000000002e197800 Exception <a 'java/lang/NoSuchMethodError': java.lang.Object.empty()Ljava/util/stream/Stream;> (0x000000071b7a0220) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\interpreter\linkResolver.cpp, line 620]
|
||||
|
||||
Events (10 events):
|
||||
Event: 15.650 Thread 0x000000002c764800 flushing nmethod 0x0000000003e3f090
|
||||
Event: 15.650 Thread 0x000000002c764800 flushing nmethod 0x0000000003e44390
|
||||
Event: 15.650 Thread 0x000000002c764800 flushing nmethod 0x0000000003e47350
|
||||
Event: 15.650 Thread 0x000000002c764800 flushing nmethod 0x0000000003e4c790
|
||||
Event: 15.650 Thread 0x000000002c764800 flushing nmethod 0x0000000003e4ea50
|
||||
Event: 15.651 Executing VM operation: RevokeBias
|
||||
Event: 15.651 Executing VM operation: RevokeBias done
|
||||
Event: 15.651 Thread 0x00000000317b8800 Thread exited: 0x00000000317b8800
|
||||
Event: 15.651 Thread 0x000000002e197800 Thread exited: 0x000000002e197800
|
||||
Event: 15.652 Executing VM operation: Exit
|
||||
|
||||
|
||||
Dynamic libraries:
|
||||
0x00007ff600c30000 - 0x00007ff600c67000 E:\Java\jdk1.8.0_201\bin\java.exe
|
||||
0x00007ffc4d510000 - 0x00007ffc4d708000 C:\Windows\SYSTEM32\ntdll.dll
|
||||
0x00007ffc4bd90000 - 0x00007ffc4be52000 C:\Windows\System32\KERNEL32.DLL
|
||||
0x00007ffc4b100000 - 0x00007ffc4b3f6000 C:\Windows\System32\KERNELBASE.dll
|
||||
0x00007ffc4c230000 - 0x00007ffc4c2e1000 C:\Windows\System32\ADVAPI32.dll
|
||||
0x00007ffc4b6e0000 - 0x00007ffc4b77e000 C:\Windows\System32\msvcrt.dll
|
||||
0x00007ffc4b990000 - 0x00007ffc4ba2f000 C:\Windows\System32\sechost.dll
|
||||
0x00007ffc4c100000 - 0x00007ffc4c223000 C:\Windows\System32\RPCRT4.dll
|
||||
0x00007ffc4ad40000 - 0x00007ffc4ad67000 C:\Windows\System32\bcrypt.dll
|
||||
0x00007ffc4b540000 - 0x00007ffc4b6dd000 C:\Windows\System32\USER32.dll
|
||||
0x00007ffc4b400000 - 0x00007ffc4b422000 C:\Windows\System32\win32u.dll
|
||||
0x00007ffc4d320000 - 0x00007ffc4d34b000 C:\Windows\System32\GDI32.dll
|
||||
0x00007ffc4ae80000 - 0x00007ffc4af99000 C:\Windows\System32\gdi32full.dll
|
||||
0x00007ffc4aba0000 - 0x00007ffc4ac3d000 C:\Windows\System32\msvcp_win.dll
|
||||
0x00007ffc4b430000 - 0x00007ffc4b530000 C:\Windows\System32\ucrtbase.dll
|
||||
0x00007ffc3c640000 - 0x00007ffc3c8da000 C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.19041.5915_none_60b4b9d171f9c7c7\COMCTL32.dll
|
||||
0x00007ffc4d2f0000 - 0x00007ffc4d31f000 C:\Windows\System32\IMM32.DLL
|
||||
0x000000006a930000 - 0x000000006aa01000 E:\Java\jdk1.8.0_201\jre\bin\msvcr100.dll
|
||||
0x000000006a080000 - 0x000000006a924000 E:\Java\jdk1.8.0_201\jre\bin\server\jvm.dll
|
||||
0x00007ffc4c420000 - 0x00007ffc4c428000 C:\Windows\System32\PSAPI.DLL
|
||||
0x00007ffc47420000 - 0x00007ffc47429000 C:\Windows\SYSTEM32\WSOCK32.dll
|
||||
0x00007ffc41df0000 - 0x00007ffc41e17000 C:\Windows\SYSTEM32\WINMM.dll
|
||||
0x00007ffc46f80000 - 0x00007ffc46f8a000 C:\Windows\SYSTEM32\VERSION.dll
|
||||
0x00007ffc4cd00000 - 0x00007ffc4cd6b000 C:\Windows\System32\WS2_32.dll
|
||||
0x00007ffc47410000 - 0x00007ffc4741f000 E:\Java\jdk1.8.0_201\jre\bin\verify.dll
|
||||
0x00007ffc473e0000 - 0x00007ffc47409000 E:\Java\jdk1.8.0_201\jre\bin\java.dll
|
||||
0x00007ffc45690000 - 0x00007ffc456b3000 E:\Java\jdk1.8.0_201\jre\bin\instrument.dll
|
||||
0x00007ffc43d30000 - 0x00007ffc43d46000 E:\Java\jdk1.8.0_201\jre\bin\zip.dll
|
||||
0x00007ffc4c590000 - 0x00007ffc4ccfe000 C:\Windows\System32\SHELL32.dll
|
||||
0x00007ffc48c20000 - 0x00007ffc493c4000 C:\Windows\SYSTEM32\windows.storage.dll
|
||||
0x00007ffc4ba30000 - 0x00007ffc4bd83000 C:\Windows\System32\combase.dll
|
||||
0x00007ffc4a5d0000 - 0x00007ffc4a5fb000 C:\Windows\SYSTEM32\Wldp.dll
|
||||
0x00007ffc4d350000 - 0x00007ffc4d41d000 C:\Windows\System32\OLEAUT32.dll
|
||||
0x00007ffc4cd70000 - 0x00007ffc4ce1d000 C:\Windows\System32\SHCORE.dll
|
||||
0x00007ffc4b930000 - 0x00007ffc4b98b000 C:\Windows\System32\shlwapi.dll
|
||||
0x00007ffc4aad0000 - 0x00007ffc4aaf5000 C:\Windows\SYSTEM32\profapi.dll
|
||||
0x00007ffbfbf40000 - 0x00007ffbfbf5a000 E:\Java\jdk1.8.0_201\jre\bin\net.dll
|
||||
0x00007ffc3f5e0000 - 0x00007ffc3f7d0000 C:\Windows\SYSTEM32\urlmon.dll
|
||||
0x00007ffc4a000000 - 0x00007ffc4a00c000 C:\Windows\SYSTEM32\netutils.dll
|
||||
0x00007ffc3f5b0000 - 0x00007ffc3f5d8000 C:\Windows\SYSTEM32\srvcli.dll
|
||||
0x00007ffc3f2f0000 - 0x00007ffc3f5af000 C:\Windows\SYSTEM32\iertutil.dll
|
||||
0x00007ffc4a330000 - 0x00007ffc4a39a000 C:\Windows\system32\mswsock.dll
|
||||
0x00007ffc4a010000 - 0x00007ffc4a0da000 C:\Windows\SYSTEM32\DNSAPI.dll
|
||||
0x00007ffc49fc0000 - 0x00007ffc49ffb000 C:\Windows\SYSTEM32\IPHLPAPI.DLL
|
||||
0x00007ffc4b530000 - 0x00007ffc4b538000 C:\Windows\System32\NSI.dll
|
||||
0x00007ffc44d70000 - 0x00007ffc44d7a000 C:\Windows\System32\rasadhlp.dll
|
||||
0x00007ffc43240000 - 0x00007ffc432c0000 C:\Windows\System32\fwpuclnt.dll
|
||||
0x00007ffc45150000 - 0x00007ffc4515d000 E:\Java\jdk1.8.0_201\jre\bin\management.dll
|
||||
0x00007ffbf80e0000 - 0x00007ffbf80f1000 E:\Java\jdk1.8.0_201\jre\bin\nio.dll
|
||||
0x00007ffc4a520000 - 0x00007ffc4a538000 C:\Windows\SYSTEM32\CRYPTSP.dll
|
||||
0x00007ffc49be0000 - 0x00007ffc49c18000 C:\Windows\system32\rsaenh.dll
|
||||
0x00007ffc4aa90000 - 0x00007ffc4aabe000 C:\Windows\SYSTEM32\USERENV.dll
|
||||
0x00007ffc4ad70000 - 0x00007ffc4adf2000 C:\Windows\System32\bcryptprimitives.dll
|
||||
0x00007ffc4a540000 - 0x00007ffc4a54c000 C:\Windows\SYSTEM32\CRYPTBASE.dll
|
||||
0x00007ffc451a0000 - 0x00007ffc451b7000 C:\Windows\SYSTEM32\dhcpcsvc6.DLL
|
||||
0x00007ffc45180000 - 0x00007ffc4519d000 C:\Windows\SYSTEM32\dhcpcsvc.DLL
|
||||
0x00007ffc34ce0000 - 0x00007ffc34cf7000 C:\Windows\system32\napinsp.dll
|
||||
0x00007ffc302b0000 - 0x00007ffc302cb000 C:\Windows\system32\pnrpnsp.dll
|
||||
0x00007ffc30290000 - 0x00007ffc302ad000 C:\Windows\system32\wshbth.dll
|
||||
0x00007ffc455f0000 - 0x00007ffc4560d000 C:\Windows\system32\NLAapi.dll
|
||||
0x00007ffc30270000 - 0x00007ffc30282000 C:\Windows\System32\winrnr.dll
|
||||
0x00007ffc3abe0000 - 0x00007ffc3ac31000 C:\Windows\SYSTEM32\pdh.dll
|
||||
0x00007ffc43d20000 - 0x00007ffc43d2f000 C:\Windows\System32\perfproc.dll
|
||||
0x00007ffc1a870000 - 0x00007ffc1a87f000 C:\Windows\System32\perfos.dll
|
||||
0x00007ffc1b9c0000 - 0x00007ffc1b9e4000 E:\Java\jdk1.8.0_201\jre\bin\sunec.dll
|
||||
0x00007ffc35b90000 - 0x00007ffc35c38000 E:\Java\jdk1.8.0_201\bin\gdalalljni.dll
|
||||
0x00007ffc35b00000 - 0x00007ffc35b8d000 E:\Java\jdk1.8.0_201\bin\MSVCP140.dll
|
||||
0x00007ffc438e0000 - 0x00007ffc438fb000 E:\Java\jdk1.8.0_201\bin\VCRUNTIME140.dll
|
||||
0x00007ffc43cf0000 - 0x00007ffc43cfc000 E:\Java\jdk1.8.0_201\bin\VCRUNTIME140_1.dll
|
||||
0x00007ffbecbd0000 - 0x00007ffbee01d000 E:\Java\jdk1.8.0_201\bin\gdal.dll
|
||||
0x00007ffc4afa0000 - 0x00007ffc4b0fd000 C:\Windows\System32\CRYPT32.dll
|
||||
0x00007ffc433a0000 - 0x00007ffc433b9000 E:\Java\jdk1.8.0_201\bin\zlib.dll
|
||||
0x00007ffc359e0000 - 0x00007ffc35a73000 E:\Java\jdk1.8.0_201\bin\libcurl.dll
|
||||
0x00007ffc4c2f0000 - 0x00007ffc4c41b000 C:\Windows\System32\ole32.dll
|
||||
0x00007ffc4c450000 - 0x00007ffc4c4af000 C:\Windows\System32\WLDAP32.dll
|
||||
0x00007ffc249e0000 - 0x00007ffc24aa0000 C:\Windows\SYSTEM32\ODBC32.dll
|
||||
0x00007ffc1c440000 - 0x00007ffc1c5a3000 E:\Java\jdk1.8.0_201\bin\libxml2.dll
|
||||
0x00007ffc1c300000 - 0x00007ffc1c439000 E:\Java\jdk1.8.0_201\bin\libssl-3-x64.dll
|
||||
0x00007ffbec6f0000 - 0x00007ffbecbc2000 E:\Java\jdk1.8.0_201\bin\libcrypto-3-x64.dll
|
||||
0x00007ffc358a0000 - 0x00007ffc35954000 E:\Java\jdk1.8.0_201\bin\zstd.dll
|
||||
0x00007ffbf7f90000 - 0x00007ffbf80dd000 E:\Java\jdk1.8.0_201\bin\tiff.dll
|
||||
0x00007ffc19400000 - 0x00007ffc196ab000 E:\Java\jdk1.8.0_201\bin\xerces-c_3_2.dll
|
||||
0x00007ffc3bec0000 - 0x00007ffc3bef5000 E:\Java\jdk1.8.0_201\bin\libpng16.dll
|
||||
0x00007ffc1bfa0000 - 0x00007ffc1c2fa000 E:\Java\jdk1.8.0_201\bin\proj_9.dll
|
||||
0x00007ffbec420000 - 0x00007ffbec6e8000 E:\Java\jdk1.8.0_201\bin\sqlite3.dll
|
||||
0x0000000180000000 - 0x000000018004e000 E:\Java\jdk1.8.0_201\bin\LIBPQ.dll
|
||||
0x00007ffc35aa0000 - 0x00007ffc35af1000 E:\Java\jdk1.8.0_201\bin\openjp2.dll
|
||||
0x00007ffc3bea0000 - 0x00007ffc3bec0000 E:\Java\jdk1.8.0_201\bin\pcre.dll
|
||||
0x00007ffbd1960000 - 0x00007ffbd264b000 E:\Java\jdk1.8.0_201\bin\spatialite.dll
|
||||
0x00007ffc359b0000 - 0x00007ffc359d9000 E:\Java\jdk1.8.0_201\bin\freexl.dll
|
||||
0x00007ffbe86e0000 - 0x00007ffbe8d81000 E:\Java\jdk1.8.0_201\bin\libmysql.dll
|
||||
0x00007ffc35980000 - 0x00007ffc359a2000 E:\Java\jdk1.8.0_201\bin\ogdi.dll
|
||||
0x00007ffc35870000 - 0x00007ffc3589a000 E:\Java\jdk1.8.0_201\bin\libexpat.dll
|
||||
0x00007ffc2e8d0000 - 0x00007ffc2e92c000 E:\Java\jdk1.8.0_201\bin\geos_c.dll
|
||||
0x00007ffc25760000 - 0x00007ffc2585f000 E:\Java\jdk1.8.0_201\bin\iconv-2.dll
|
||||
0x00007ffc3d020000 - 0x00007ffc3d02c000 C:\Windows\SYSTEM32\Secur32.dll
|
||||
0x00007ffbe8500000 - 0x00007ffbe86d5000 E:\Java\jdk1.8.0_201\bin\geos.dll
|
||||
0x00007ffc4a990000 - 0x00007ffc4a99a000 C:\Windows\SYSTEM32\DPAPI.DLL
|
||||
0x00007ffc4aa50000 - 0x00007ffc4aa82000 C:\Windows\SYSTEM32\SSPICLI.DLL
|
||||
0x00007ffc288f0000 - 0x00007ffc28957000 E:\gdal\bin\gdalplugins\ogr_FileGDB.dll
|
||||
0x00007ffbd0dd0000 - 0x00007ffbd1952000 E:\Java\jdk1.8.0_201\bin\FileGDBAPI.dll
|
||||
0x00007ffc485d0000 - 0x00007ffc487d1000 C:\Windows\SYSTEM32\dbghelp.dll
|
||||
|
||||
VM Arguments:
|
||||
jvm_args: -XX:TieredStopAtLevel=1 -Xverify:none -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dmanagement.endpoints.jmx.exposure.include=* -javaagent:E:\Program Files\JetBrains\IntelliJ IDEA 2025.1.1.1\lib\idea_rt.jar=53785 -Dfile.encoding=UTF-8
|
||||
java_command: cn.edu.whu.boot.BootApplication
|
||||
java_class_path (initial): E:\Java\jdk1.8.0_201\jre\lib\charsets.jar;E:\Java\jdk1.8.0_201\jre\lib\deploy.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;E:\Java\jdk1.8.0_201\jre\lib\javaws.jar;E:\Java\jdk1.8.0_201\jre\lib\jce.jar;E:\Java\jdk1.8.0_201\jre\lib\jfr.jar;E:\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;E:\Java\jdk1.8.0_201\jre\lib\jsse.jar;E:\Java\jdk1.8.0_201\jre\lib\management-agent.jar;E:\Java\jdk1.8.0_201\jre\lib\plugin.jar;E:\Java\jdk1.8.0_201\jre\lib\resources.jar;E:\Java\jdk1.8.0_201\jre\lib\rt.jar;E:\503\TJ_project\lydc_backend\target\classes;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.3.0.RELEASE\spring-boot-starter-web-2.3.0.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter\2.3.0.RELEASE\spring-boot-starter-2.3.0.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot\2.3.0.RELEASE\spring-boot-2.3.0.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.3.0.RELEASE\spring-boot-starter-logging-2.3.0.RELEASE.jar;C:\Users\Administrator\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Administrator\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Administrator\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.13.2\log4j-to-slf4j-2.13.2.jar;C:\Users\Administrator\.m2\repository\org\apache\logging\log4j\log4j-a
|
||||
Launcher Type: SUN_STANDARD
|
||||
|
||||
Environment Variables:
|
||||
JAVA_HOME=E:\Java\jdk1.8.0_201
|
||||
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Git\cmd;E:\gdal\bin;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;;E:\Program Files\JetBrains\IntelliJ IDEA 2025.1.1.1\bin;
|
||||
USERNAME=Administrator
|
||||
OS=Windows_NT
|
||||
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 183 Stepping 1, GenuineIntel
|
||||
|
||||
|
||||
|
||||
--------------- S Y S T E M ---------------
|
||||
|
||||
OS: Windows 10.0 , 64 bit Build 19041 (10.0.19041.5915)
|
||||
|
||||
CPU:total 28 (initial active 28) (14 cores per cpu, 2 threads per core) family 6 model 183 stepping 1, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, avx2, aes, clmul, erms, 3dnowpref, lzcnt, ht, tsc, tscinvbit, bmi1, bmi2, adx
|
||||
|
||||
Memory: 4k page, physical 33338604k(22288736k free), swap 38319340k(24209488k free)
|
||||
|
||||
vm_info: Java HotSpot(TM) 64-Bit Server VM (25.201-b09) for windows-amd64 JRE (1.8.0_201-b09), built on Dec 15 2018 18:36:39 by "java_re" with MS VC++ 10.0 (VS2010)
|
||||
|
||||
time: Mon Nov 03 21:25:38 2025
|
||||
timezone: <20>й<EFBFBD><D0B9><EFBFBD>ʱ<D7BC><CAB1>
|
||||
elapsed time: 16 seconds (0d 0h 0m 16s)
|
||||
|
||||
532
hs_err_pid17356.log
Normal file
532
hs_err_pid17356.log
Normal file
@@ -0,0 +1,532 @@
|
||||
#
|
||||
# A fatal error has been detected by the Java Runtime Environment:
|
||||
#
|
||||
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffbecc04fa0, pid=17356, tid=0x0000000000000d44
|
||||
#
|
||||
# JRE version: Java(TM) SE Runtime Environment (8.0_201-b09) (build 1.8.0_201-b09)
|
||||
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.201-b09 mixed mode windows-amd64 compressed oops)
|
||||
# Problematic frame:
|
||||
# C [gdal.dll+0x34fa0]
|
||||
#
|
||||
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
|
||||
#
|
||||
# If you would like to submit a bug report, please visit:
|
||||
# http://bugreport.java.com/bugreport/crash.jsp
|
||||
# The crash happened outside the Java Virtual Machine in native code.
|
||||
# See problematic frame for where to report the bug.
|
||||
#
|
||||
|
||||
--------------- T H R E A D ---------------
|
||||
|
||||
Current thread (0x00000000302d2000): JavaThread "http-nio-0.0.0.0-9001-exec-1" daemon [_thread_in_native, id=3396, stack(0x0000000032b90000,0x0000000032c90000)]
|
||||
|
||||
siginfo: ExceptionCode=0xc0000005, reading address 0x0000000000000000
|
||||
|
||||
Registers:
|
||||
RAX=0x0000000036790960, RBX=0xffffffffffffffff, RCX=0x0000000000000000, RDX=0x00007ffbedaebff0
|
||||
RSP=0x0000000032c8ca20, RBP=0x000000000000195f, RSI=0x00007ffbedaebff0, RDI=0x0000000000000000
|
||||
R8 =0x000000000000195f, R9 =0x0000000000000001, R10=0x00000000367ba320, R11=0x0000000036968cf1
|
||||
R12=0x00000000367b9ba0, R13=0x00000000367ba560, R14=0x0000000000000004, R15=0x000000000000000a
|
||||
RIP=0x00007ffbecc04fa0, EFLAGS=0x0000000000010202
|
||||
|
||||
Top of Stack: (sp=0x0000000032c8ca20)
|
||||
0x0000000032c8ca20: 0000000036a26760 00007ffbece518fa
|
||||
0x0000000032c8ca30: 00000000367b9ba0 0000000000000000
|
||||
0x0000000032c8ca40: 0000000000000004 00007ffbecc05012
|
||||
0x0000000032c8ca50: 0000000000000000 00007ffbedaebff0
|
||||
0x0000000032c8ca60: 0000000000000009 00007ffc4b450c06
|
||||
0x0000000032c8ca70: 00000000367ba560 00007ffbece491c3
|
||||
0x0000000032c8ca80: 0000000000000004 00007ffbece4d1f1
|
||||
0x0000000032c8ca90: 0000000000000014 000000000000000a
|
||||
0x0000000032c8caa0: 0000000000000014 00007ffbece4d87b
|
||||
0x0000000032c8cab0: 0000000000000014 000000000000000a
|
||||
0x0000000032c8cac0: 00000000367b9ba0 00000000302d2000
|
||||
0x0000000032c8cad0: 00000000367b9ba0 0000000033bf2be8
|
||||
0x0000000032c8cae0: 0000000000000000 0000000000000001
|
||||
0x0000000032c8caf0: 00000000367ba560 0000000032c8cc68
|
||||
0x0000000032c8cb00: 00000000367b9ba0 00007ffbece4d5f3
|
||||
0x0000000032c8cb10: 000000000000000a 0000000000000014
|
||||
|
||||
Instructions: (pc=0x00007ffbecc04fa0)
|
||||
0x00007ffbecc04f80: 48 89 5c 24 08 48 89 74 24 10 57 48 83 ec 20 48
|
||||
0x00007ffbecc04f90: 8b f9 48 c7 c3 ff ff ff ff 0f 1f 80 00 00 00 00
|
||||
0x00007ffbecc04fa0: 80 7c 19 01 00 48 8d 5b 01 75 f5 48 8d 4b 01 ff
|
||||
0x00007ffbecc04fb0: 15 4b fb e9 00 48 8b f0 48 85 c0 75 10 48 8b 5c
|
||||
|
||||
|
||||
Register to memory mapping:
|
||||
|
||||
RAX=0x0000000036790960 is an unknown value
|
||||
RBX=0xffffffffffffffff is an unknown value
|
||||
RCX=0x0000000000000000 is an unknown value
|
||||
RDX=0x00007ffbedaebff0 is an unknown value
|
||||
RSP=0x0000000032c8ca20 is pointing into the stack for thread: 0x00000000302d2000
|
||||
RBP=0x000000000000195f is an unknown value
|
||||
RSI=0x00007ffbedaebff0 is an unknown value
|
||||
RDI=0x0000000000000000 is an unknown value
|
||||
R8 =0x000000000000195f is an unknown value
|
||||
R9 =0x0000000000000001 is an unknown value
|
||||
R10=0x00000000367ba320 is an unknown value
|
||||
R11=0x0000000036968cf1 is an unknown value
|
||||
R12=0x00000000367b9ba0 is an unknown value
|
||||
R13=0x00000000367ba560 is an unknown value
|
||||
R14=0x0000000000000004 is an unknown value
|
||||
R15=0x000000000000000a is an unknown value
|
||||
|
||||
|
||||
Stack: [0x0000000032b90000,0x0000000032c90000], sp=0x0000000032c8ca20, free space=1010k
|
||||
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
|
||||
C [gdal.dll+0x34fa0]
|
||||
C [gdal.dll+0x35012]
|
||||
C [gdal.dll+0x27d1f1]
|
||||
C [gdal.dll+0x27d5f3]
|
||||
C [gdal.dll+0xc27149]
|
||||
C [gdalalljni.dll+0x5307f]
|
||||
C 0x0000000002eb8c67
|
||||
|
||||
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
|
||||
j org.gdal.ogr.ogrJNI.Layer_CreateFeature(JLorg/gdal/ogr/Layer;JLorg/gdal/ogr/Feature;)I+0
|
||||
j org.gdal.ogr.Layer.CreateFeature(Lorg/gdal/ogr/Feature;)I+10
|
||||
j cn.edu.whu.boot.collection.controller.ExportController.addGeometryLayerToGdb(Lorg/gdal/ogr/DataSource;Lcn/edu/whu/boot/xml/xmlreader/bean/Table;Ljava/lang/String;Ljava/util/List;)V+727
|
||||
j cn.edu.whu.boot.collection.controller.ExportController.taskGdbExport(Ljava/lang/Integer;ZLjavax/servlet/http/HttpServletResponse;)Ljava/lang/String;+793
|
||||
v ~StubRoutines::call_stub
|
||||
J 1981 sun.reflect.NativeMethodAccessorImpl.invoke0(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (0 bytes) @ 0x000000000346a5ff [0x000000000346a580+0x7f]
|
||||
J 1980 C1 sun.reflect.NativeMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (104 bytes) @ 0x000000000346ada4 [0x000000000346a9e0+0x3c4]
|
||||
J 1971 C1 sun.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (10 bytes) @ 0x0000000003467c24 [0x0000000003467be0+0x44]
|
||||
J 1970 C1 java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (62 bytes) @ 0x00000000034683a4 [0x00000000034682a0+0x104]
|
||||
j org.springframework.web.method.support.InvocableHandlerMethod.doInvoke([Ljava/lang/Object;)Ljava/lang/Object;+16
|
||||
j org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(Lorg/springframework/web/context/request/NativeWebRequest;Lorg/springframework/web/method/support/ModelAndViewContainer;[Ljava/lang/Object;)Ljava/lang/Object;+56
|
||||
j org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(Lorg/springframework/web/context/request/ServletWebRequest;Lorg/springframework/web/method/support/ModelAndViewContainer;[Ljava/lang/Object;)V+4
|
||||
j org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Lorg/springframework/web/method/HandlerMethod;)Lorg/springframework/web/servlet/ModelAndView;+244
|
||||
j org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Lorg/springframework/web/method/HandlerMethod;)Lorg/springframework/web/servlet/ModelAndView;+81
|
||||
j org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljava/lang/Object;)Lorg/springframework/web/servlet/ModelAndView;+7
|
||||
j org.springframework.web.servlet.DispatcherServlet.doDispatch(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+257
|
||||
j org.springframework.web.servlet.DispatcherServlet.doService(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+212
|
||||
j org.springframework.web.servlet.FrameworkServlet.processRequest(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+71
|
||||
j org.springframework.web.servlet.FrameworkServlet.doGet(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+3
|
||||
j javax.servlet.http.HttpServlet.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+35
|
||||
j org.springframework.web.servlet.FrameworkServlet.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+33
|
||||
j javax.servlet.http.HttpServlet.service(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+36
|
||||
j org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+304
|
||||
j org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+101
|
||||
j org.apache.tomcat.websocket.server.WsFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+21
|
||||
j org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+135
|
||||
j org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+101
|
||||
j org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+13
|
||||
j org.apache.shiro.web.servlet.AbstractShiroFilter$1.call()Ljava/lang/Object;+31
|
||||
j org.apache.shiro.subject.support.SubjectCallable.doCall(Ljava/util/concurrent/Callable;)Ljava/lang/Object;+1
|
||||
j org.apache.shiro.subject.support.SubjectCallable.call()Ljava/lang/Object;+14
|
||||
j org.apache.shiro.subject.support.DelegatingSubject.execute(Ljava/util/concurrent/Callable;)Ljava/lang/Object;+7
|
||||
j org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+47
|
||||
j org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+113
|
||||
j org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+135
|
||||
j org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+101
|
||||
j org.springframework.web.filter.RequestContextFilter.doFilterInternal(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljavax/servlet/FilterChain;)V+21
|
||||
j org.springframework.web.filter.OncePerRequestFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+147
|
||||
j org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+135
|
||||
j org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+101
|
||||
j org.springframework.web.filter.FormContentFilter.doFilterInternal(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljavax/servlet/FilterChain;)V+38
|
||||
j org.springframework.web.filter.OncePerRequestFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+147
|
||||
j org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+135
|
||||
j org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+101
|
||||
j org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljavax/servlet/FilterChain;)V+44
|
||||
j org.springframework.session.web.http.OncePerRequestFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+118
|
||||
j org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+135
|
||||
j org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+101
|
||||
j org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljavax/servlet/FilterChain;)V+53
|
||||
j org.springframework.web.filter.OncePerRequestFilter.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Ljavax/servlet/FilterChain;)V+147
|
||||
j org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+135
|
||||
j org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+101
|
||||
j org.apache.catalina.core.StandardWrapperValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+694
|
||||
j org.apache.catalina.core.StandardContextValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+166
|
||||
j org.apache.catalina.authenticator.AuthenticatorBase.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+260
|
||||
j org.apache.catalina.core.StandardHostValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+114
|
||||
j org.apache.catalina.valves.ErrorReportValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+6
|
||||
j org.apache.catalina.core.StandardEngineValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+45
|
||||
j org.apache.catalina.connector.CoyoteAdapter.service(Lorg/apache/coyote/Request;Lorg/apache/coyote/Response;)V+199
|
||||
j org.apache.coyote.http11.Http11Processor.service(Lorg/apache/tomcat/util/net/SocketWrapperBase;)Lorg/apache/tomcat/util/net/AbstractEndpoint$Handler$SocketState;+735
|
||||
j org.apache.coyote.AbstractProcessorLight.process(Lorg/apache/tomcat/util/net/SocketWrapperBase;Lorg/apache/tomcat/util/net/SocketEvent;)Lorg/apache/tomcat/util/net/AbstractEndpoint$Handler$SocketState;+170
|
||||
j org.apache.coyote.AbstractProtocol$ConnectionHandler.process(Lorg/apache/tomcat/util/net/SocketWrapperBase;Lorg/apache/tomcat/util/net/SocketEvent;)Lorg/apache/tomcat/util/net/AbstractEndpoint$Handler$SocketState;+505
|
||||
j org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun()V+214
|
||||
j org.apache.tomcat.util.net.SocketProcessorBase.run()V+21
|
||||
j java.util.concurrent.ThreadPoolExecutor.runWorker(Ljava/util/concurrent/ThreadPoolExecutor$Worker;)V+95
|
||||
j java.util.concurrent.ThreadPoolExecutor$Worker.run()V+5
|
||||
j org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run()V+4
|
||||
j java.lang.Thread.run()V+11
|
||||
v ~StubRoutines::call_stub
|
||||
|
||||
--------------- P R O C E S S ---------------
|
||||
|
||||
Java Threads: ( => current thread )
|
||||
0x0000000030aed000 JavaThread "FeatureNativeObjectsCleaner" daemon [_thread_blocked, id=15244, stack(0x0000000036f60000,0x0000000037060000)]
|
||||
0x0000000030aec800 JavaThread "GeometryNativeObjectsCleaner" daemon [_thread_blocked, id=3820, stack(0x0000000036e60000,0x0000000036f60000)]
|
||||
0x0000000030aea000 JavaThread "MessageBroker-5" [_thread_blocked, id=11528, stack(0x0000000036560000,0x0000000036660000)]
|
||||
0x0000000030af0000 JavaThread "lettuce-eventExecutorLoop-1-1" daemon [_thread_blocked, id=17248, stack(0x0000000035270000,0x0000000035370000)]
|
||||
0x0000000030ae2800 JavaThread "lettuce-nioEventLoop-4-1" daemon [_thread_in_native, id=5596, stack(0x0000000034160000,0x0000000034260000)]
|
||||
0x0000000030ae9800 JavaThread "SessionValidationThread-1" daemon [_thread_blocked, id=18952, stack(0x0000000033d90000,0x0000000033e90000)]
|
||||
0x0000000030ae3800 JavaThread "RMI TCP Connection(2)-192.168.1.32" daemon [_thread_in_native, id=17612, stack(0x0000000033a90000,0x0000000033b90000)]
|
||||
0x0000000030ae2000 JavaThread "MessageBroker-4" [_thread_blocked, id=9588, stack(0x0000000033990000,0x0000000033a90000)]
|
||||
0x0000000030ae8800 JavaThread "DestroyJavaVM" [_thread_blocked, id=9444, stack(0x0000000002a40000,0x0000000002b40000)]
|
||||
0x0000000030ae1000 JavaThread "MessageBroker-3" [_thread_blocked, id=17364, stack(0x0000000033890000,0x0000000033990000)]
|
||||
0x0000000030ae8000 JavaThread "MessageBroker-2" [_thread_blocked, id=18688, stack(0x0000000033790000,0x0000000033890000)]
|
||||
0x0000000030ae5800 JavaThread "http-nio-0.0.0.0-9001-Acceptor" daemon [_thread_in_native, id=1752, stack(0x0000000033690000,0x0000000033790000)]
|
||||
0x0000000030ae5000 JavaThread "http-nio-0.0.0.0-9001-ClientPoller" daemon [_thread_in_native, id=16100, stack(0x0000000033590000,0x0000000033690000)]
|
||||
0x0000000030ae6800 JavaThread "http-nio-0.0.0.0-9001-exec-10" daemon [_thread_blocked, id=18992, stack(0x0000000033490000,0x0000000033590000)]
|
||||
0x0000000030ae4000 JavaThread "http-nio-0.0.0.0-9001-exec-9" daemon [_thread_blocked, id=14280, stack(0x0000000033390000,0x0000000033490000)]
|
||||
0x0000000030ae7000 JavaThread "http-nio-0.0.0.0-9001-exec-8" daemon [_thread_blocked, id=13748, stack(0x0000000033290000,0x0000000033390000)]
|
||||
0x00000000302ce800 JavaThread "http-nio-0.0.0.0-9001-exec-7" daemon [_thread_blocked, id=16148, stack(0x0000000033190000,0x0000000033290000)]
|
||||
0x00000000302cd800 JavaThread "http-nio-0.0.0.0-9001-exec-6" daemon [_thread_blocked, id=19248, stack(0x0000000033090000,0x0000000033190000)]
|
||||
0x00000000302d4800 JavaThread "http-nio-0.0.0.0-9001-exec-5" daemon [_thread_blocked, id=11532, stack(0x0000000032f90000,0x0000000033090000)]
|
||||
0x00000000302d3000 JavaThread "http-nio-0.0.0.0-9001-exec-4" daemon [_thread_blocked, id=1884, stack(0x0000000032e90000,0x0000000032f90000)]
|
||||
0x00000000302d0000 JavaThread "http-nio-0.0.0.0-9001-exec-3" daemon [_thread_blocked, id=252, stack(0x0000000032d90000,0x0000000032e90000)]
|
||||
0x00000000302cf000 JavaThread "http-nio-0.0.0.0-9001-exec-2" daemon [_thread_blocked, id=15996, stack(0x0000000032c90000,0x0000000032d90000)]
|
||||
=>0x00000000302d2000 JavaThread "http-nio-0.0.0.0-9001-exec-1" daemon [_thread_in_native, id=3396, stack(0x0000000032b90000,0x0000000032c90000)]
|
||||
0x00000000302d1800 JavaThread "http-nio-0.0.0.0-9001-BlockPoller" daemon [_thread_in_native, id=3532, stack(0x0000000032a90000,0x0000000032b90000)]
|
||||
0x00000000302d0800 JavaThread "MessageBroker-1" [_thread_blocked, id=2416, stack(0x0000000032190000,0x0000000032290000)]
|
||||
0x00000000302d3800 JavaThread "HikariPool-1 connection adder" daemon [_thread_blocked, id=3952, stack(0x0000000031e90000,0x0000000031f90000)]
|
||||
0x0000000028d47000 JavaThread "container-0" [_thread_blocked, id=3140, stack(0x0000000031d90000,0x0000000031e90000)]
|
||||
0x0000000028d48800 JavaThread "Catalina-utility-2" [_thread_blocked, id=7696, stack(0x0000000031c90000,0x0000000031d90000)]
|
||||
0x0000000028d44800 JavaThread "Catalina-utility-1" [_thread_blocked, id=13188, stack(0x0000000031b90000,0x0000000031c90000)]
|
||||
0x0000000028d42000 JavaThread "HikariPool-1 housekeeper" daemon [_thread_blocked, id=15844, stack(0x0000000031890000,0x0000000031990000)]
|
||||
0x000000002b6ac800 JavaThread "PostgreSQL-JDBC-SharedTimer-1" daemon [_thread_blocked, id=9172, stack(0x0000000031790000,0x0000000031890000)]
|
||||
0x000000002cf80800 JavaThread "JMX server connection timeout 24" daemon [_thread_blocked, id=17704, stack(0x000000002e380000,0x000000002e480000)]
|
||||
0x000000002cf3a800 JavaThread "RMI Scheduler(0)" daemon [_thread_blocked, id=17464, stack(0x000000002e280000,0x000000002e380000)]
|
||||
0x000000002cef7000 JavaThread "RMI TCP Connection(1)-192.168.1.32" daemon [_thread_in_native, id=10332, stack(0x000000002e180000,0x000000002e280000)]
|
||||
0x000000002cdb7000 JavaThread "RMI TCP Accept-0" daemon [_thread_in_native, id=19092, stack(0x000000002dcd0000,0x000000002ddd0000)]
|
||||
0x000000002bc6b800 JavaThread "Service Thread" daemon [_thread_blocked, id=14408, stack(0x000000002cc00000,0x000000002cd00000)]
|
||||
0x000000002bb7f000 JavaThread "C1 CompilerThread11" daemon [_thread_blocked, id=17812, stack(0x000000002cb00000,0x000000002cc00000)]
|
||||
0x000000002bb76000 JavaThread "C1 CompilerThread10" daemon [_thread_blocked, id=19160, stack(0x000000002ca00000,0x000000002cb00000)]
|
||||
0x000000002bb73800 JavaThread "C1 CompilerThread9" daemon [_thread_blocked, id=13504, stack(0x000000002c900000,0x000000002ca00000)]
|
||||
0x000000002bb6a800 JavaThread "C1 CompilerThread8" daemon [_thread_blocked, id=17204, stack(0x000000002c800000,0x000000002c900000)]
|
||||
0x000000002bb67800 JavaThread "C2 CompilerThread7" daemon [_thread_blocked, id=4436, stack(0x000000002c700000,0x000000002c800000)]
|
||||
0x000000002bb5f000 JavaThread "C2 CompilerThread6" daemon [_thread_blocked, id=2332, stack(0x000000002c600000,0x000000002c700000)]
|
||||
0x000000002bb5c000 JavaThread "C2 CompilerThread5" daemon [_thread_blocked, id=17980, stack(0x000000002c500000,0x000000002c600000)]
|
||||
0x000000002bb59800 JavaThread "C2 CompilerThread4" daemon [_thread_blocked, id=9096, stack(0x000000002c300000,0x000000002c400000)]
|
||||
0x000000002bb58800 JavaThread "C2 CompilerThread3" daemon [_thread_blocked, id=2784, stack(0x000000002c200000,0x000000002c300000)]
|
||||
0x000000002bb58000 JavaThread "C2 CompilerThread2" daemon [_thread_blocked, id=8084, stack(0x000000002c100000,0x000000002c200000)]
|
||||
0x000000002bb57000 JavaThread "C2 CompilerThread1" daemon [_thread_blocked, id=17652, stack(0x000000002c000000,0x000000002c100000)]
|
||||
0x000000002bb55800 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=14620, stack(0x000000002bf00000,0x000000002c000000)]
|
||||
0x000000002bb54000 JavaThread "Monitor Ctrl-Break" daemon [_thread_in_native, id=6068, stack(0x000000002be00000,0x000000002bf00000)]
|
||||
0x0000000028bba000 JavaThread "Attach Listener" daemon [_thread_blocked, id=18180, stack(0x000000002b500000,0x000000002b600000)]
|
||||
0x0000000028c15000 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=13996, stack(0x000000002b400000,0x000000002b500000)]
|
||||
0x0000000028b9d800 JavaThread "Finalizer" daemon [_thread_blocked, id=7232, stack(0x000000002b300000,0x000000002b400000)]
|
||||
0x0000000028b97800 JavaThread "Reference Handler" daemon [_thread_blocked, id=17012, stack(0x000000002b200000,0x000000002b300000)]
|
||||
|
||||
Other Threads:
|
||||
0x00000000269cc000 VMThread [stack: 0x000000002b100000,0x000000002b200000] [id=7748]
|
||||
0x000000002cdbe800 WatcherThread [stack: 0x000000002ddd0000,0x000000002ded0000] [id=18648]
|
||||
|
||||
VM state:not at safepoint (normal execution)
|
||||
|
||||
VM Mutex/Monitor currently owned by a thread: None
|
||||
|
||||
heap address: 0x00000005c3400000, size: 8140 MB, Compressed Oops mode: Zero based, Oop shift amount: 3
|
||||
Narrow klass base: 0x0000000000000000, Narrow klass shift: 3
|
||||
Compressed class space size: 1073741824 Address: 0x00000007c0000000
|
||||
|
||||
Heap:
|
||||
PSYoungGen total 413696K, used 44369K [0x0000000716700000, 0x0000000731b80000, 0x00000007c0000000)
|
||||
eden space 393216K, 11% used [0x0000000716700000,0x0000000719254530,0x000000072e700000)
|
||||
from space 20480K, 0% used [0x0000000730780000,0x0000000730780000,0x0000000731b80000)
|
||||
to space 25088K, 0% used [0x000000072ea80000,0x000000072ea80000,0x0000000730300000)
|
||||
ParOldGen total 608768K, used 32122K [0x00000005c3400000, 0x00000005e8680000, 0x0000000716700000)
|
||||
object space 608768K, 5% used [0x00000005c3400000,0x00000005c535e8b0,0x00000005e8680000)
|
||||
Metaspace used 59500K, capacity 62494K, committed 62616K, reserved 1103872K
|
||||
class space used 7280K, capacity 7807K, committed 7856K, reserved 1048576K
|
||||
|
||||
Card table byte_map: [0x0000000012260000,0x0000000013250000] byte_map_base: 0x000000000f446000
|
||||
|
||||
Marking Bits: (ParMarkBitMap*) 0x000000006a8a4ce0
|
||||
Begin Bits: [0x00000000150f0000, 0x000000001d020000)
|
||||
End Bits: [0x000000001d020000, 0x0000000024f50000)
|
||||
|
||||
Polling page: 0x0000000000c00000
|
||||
|
||||
CodeCache: size=245760Kb used=13881Kb max_used=13881Kb free=231878Kb
|
||||
bounds [0x0000000002ea0000, 0x0000000003c30000, 0x0000000011ea0000]
|
||||
total_blobs=6937 nmethods=6187 adapters=659
|
||||
compilation: enabled
|
||||
|
||||
Compilation events (10 events):
|
||||
Event: 4.508 Thread 0x000000002bb7f000 6183 1 org.postgresql.jdbc.PgResultSet::checkColumnIndex (54 bytes)
|
||||
Event: 4.508 Thread 0x000000002bb73800 nmethod 6182 0x0000000003c27550 code [0x0000000003c27700, 0x0000000003c27b88]
|
||||
Event: 4.508 Thread 0x000000002bb73800 6184 1 org.apache.ibatis.type.TypeHandlerRegistry::hasTypeHandler (7 bytes)
|
||||
Event: 4.508 Thread 0x000000002bb6a800 nmethod 6176 0x0000000003c27e50 code [0x0000000003c27fc0, 0x0000000003c282d8]
|
||||
Event: 4.508 Thread 0x000000002bb73800 nmethod 6184 0x0000000003c28490 code [0x0000000003c285e0, 0x0000000003c28748]
|
||||
Event: 4.508 Thread 0x000000002bb7f000 nmethod 6183 0x0000000003c287d0 code [0x0000000003c28980, 0x0000000003c28e78]
|
||||
Event: 4.508 Thread 0x000000002bb76000 6186 1 org.postgresql.core.PGStream::receiveChar (22 bytes)
|
||||
Event: 4.508 Thread 0x000000002bb6a800 6187 1 org.postgresql.core.VisibleBufferedInputStream::read (31 bytes)
|
||||
Event: 4.508 Thread 0x000000002bb76000 nmethod 6186 0x0000000003c29250 code [0x0000000003c293c0, 0x0000000003c295d8]
|
||||
Event: 4.508 Thread 0x000000002bb6a800 nmethod 6187 0x0000000003c29790 code [0x0000000003c29900, 0x0000000003c29aa8]
|
||||
|
||||
GC Heap History (10 events):
|
||||
Event: 1.137 GC heap before
|
||||
{Heap before GC invocations=5 (full 1):
|
||||
PSYoungGen total 283648K, used 174161K [0x0000000716700000, 0x000000072de80000, 0x00000007c0000000)
|
||||
eden space 262144K, 63% used [0x0000000716700000,0x0000000720905518,0x0000000726700000)
|
||||
from space 21504K, 38% used [0x0000000726700000,0x0000000726f0f280,0x0000000727c00000)
|
||||
to space 21504K, 0% used [0x000000072c980000,0x000000072c980000,0x000000072de80000)
|
||||
ParOldGen total 227840K, used 9897K [0x00000005c3400000, 0x00000005d1280000, 0x0000000716700000)
|
||||
object space 227840K, 4% used [0x00000005c3400000,0x00000005c3daa578,0x00000005d1280000)
|
||||
Metaspace used 34084K, capacity 35470K, committed 35496K, reserved 1079296K
|
||||
class space used 4462K, capacity 4782K, committed 4784K, reserved 1048576K
|
||||
Event: 1.141 GC heap after
|
||||
Heap after GC invocations=5 (full 1):
|
||||
PSYoungGen total 355840K, used 13174K [0x0000000716700000, 0x000000072db00000, 0x00000007c0000000)
|
||||
eden space 337920K, 0% used [0x0000000716700000,0x0000000716700000,0x000000072b100000)
|
||||
from space 17920K, 73% used [0x000000072c980000,0x000000072d65da90,0x000000072db00000)
|
||||
to space 21504K, 0% used [0x000000072b100000,0x000000072b100000,0x000000072c600000)
|
||||
ParOldGen total 227840K, used 9977K [0x00000005c3400000, 0x00000005d1280000, 0x0000000716700000)
|
||||
object space 227840K, 4% used [0x00000005c3400000,0x00000005c3dbe588,0x00000005d1280000)
|
||||
Metaspace used 34084K, capacity 35470K, committed 35496K, reserved 1079296K
|
||||
class space used 4462K, capacity 4782K, committed 4784K, reserved 1048576K
|
||||
}
|
||||
Event: 1.141 GC heap before
|
||||
{Heap before GC invocations=6 (full 2):
|
||||
PSYoungGen total 355840K, used 13174K [0x0000000716700000, 0x000000072db00000, 0x00000007c0000000)
|
||||
eden space 337920K, 0% used [0x0000000716700000,0x0000000716700000,0x000000072b100000)
|
||||
from space 17920K, 73% used [0x000000072c980000,0x000000072d65da90,0x000000072db00000)
|
||||
to space 21504K, 0% used [0x000000072b100000,0x000000072b100000,0x000000072c600000)
|
||||
ParOldGen total 227840K, used 9977K [0x00000005c3400000, 0x00000005d1280000, 0x0000000716700000)
|
||||
object space 227840K, 4% used [0x00000005c3400000,0x00000005c3dbe588,0x00000005d1280000)
|
||||
Metaspace used 34084K, capacity 35470K, committed 35496K, reserved 1079296K
|
||||
class space used 4462K, capacity 4782K, committed 4784K, reserved 1048576K
|
||||
Event: 1.188 GC heap after
|
||||
Heap after GC invocations=6 (full 2):
|
||||
PSYoungGen total 355840K, used 0K [0x0000000716700000, 0x000000072db00000, 0x00000007c0000000)
|
||||
eden space 337920K, 0% used [0x0000000716700000,0x0000000716700000,0x000000072b100000)
|
||||
from space 17920K, 0% used [0x000000072c980000,0x000000072c980000,0x000000072db00000)
|
||||
to space 21504K, 0% used [0x000000072b100000,0x000000072b100000,0x000000072c600000)
|
||||
ParOldGen total 408064K, used 19598K [0x00000005c3400000, 0x00000005dc280000, 0x0000000716700000)
|
||||
object space 408064K, 4% used [0x00000005c3400000,0x00000005c4723968,0x00000005dc280000)
|
||||
Metaspace used 34084K, capacity 35470K, committed 35496K, reserved 1079296K
|
||||
class space used 4462K, capacity 4782K, committed 4784K, reserved 1048576K
|
||||
}
|
||||
Event: 2.123 GC heap before
|
||||
{Heap before GC invocations=7 (full 2):
|
||||
PSYoungGen total 355840K, used 337920K [0x0000000716700000, 0x000000072db00000, 0x00000007c0000000)
|
||||
eden space 337920K, 100% used [0x0000000716700000,0x000000072b100000,0x000000072b100000)
|
||||
from space 17920K, 0% used [0x000000072c980000,0x000000072c980000,0x000000072db00000)
|
||||
to space 21504K, 0% used [0x000000072b100000,0x000000072b100000,0x000000072c600000)
|
||||
ParOldGen total 408064K, used 19598K [0x00000005c3400000, 0x00000005dc280000, 0x0000000716700000)
|
||||
object space 408064K, 4% used [0x00000005c3400000,0x00000005c4723968,0x00000005dc280000)
|
||||
Metaspace used 49543K, capacity 52198K, committed 52392K, reserved 1095680K
|
||||
class space used 6239K, capacity 6760K, committed 6832K, reserved 1048576K
|
||||
Event: 2.131 GC heap after
|
||||
Heap after GC invocations=7 (full 2):
|
||||
PSYoungGen total 359424K, used 21498K [0x0000000716700000, 0x0000000731d80000, 0x00000007c0000000)
|
||||
eden space 337920K, 0% used [0x0000000716700000,0x0000000716700000,0x000000072b100000)
|
||||
from space 21504K, 99% used [0x000000072b100000,0x000000072c5feb08,0x000000072c600000)
|
||||
to space 22528K, 0% used [0x0000000730780000,0x0000000730780000,0x0000000731d80000)
|
||||
ParOldGen total 408064K, used 21202K [0x00000005c3400000, 0x00000005dc280000, 0x0000000716700000)
|
||||
object space 408064K, 5% used [0x00000005c3400000,0x00000005c48b4ba0,0x00000005dc280000)
|
||||
Metaspace used 49543K, capacity 52198K, committed 52392K, reserved 1095680K
|
||||
class space used 6239K, capacity 6760K, committed 6832K, reserved 1048576K
|
||||
}
|
||||
Event: 4.059 GC heap before
|
||||
{Heap before GC invocations=8 (full 2):
|
||||
PSYoungGen total 359424K, used 213127K [0x0000000716700000, 0x0000000731d80000, 0x00000007c0000000)
|
||||
eden space 337920K, 56% used [0x0000000716700000,0x0000000722223468,0x000000072b100000)
|
||||
from space 21504K, 99% used [0x000000072b100000,0x000000072c5feb08,0x000000072c600000)
|
||||
to space 22528K, 0% used [0x0000000730780000,0x0000000730780000,0x0000000731d80000)
|
||||
ParOldGen total 408064K, used 21202K [0x00000005c3400000, 0x00000005dc280000, 0x0000000716700000)
|
||||
object space 408064K, 5% used [0x00000005c3400000,0x00000005c48b4ba0,0x00000005dc280000)
|
||||
Metaspace used 56210K, capacity 59082K, committed 59160K, reserved 1101824K
|
||||
class space used 6888K, capacity 7436K, committed 7472K, reserved 1048576K
|
||||
Event: 4.066 GC heap after
|
||||
Heap after GC invocations=8 (full 2):
|
||||
PSYoungGen total 413696K, used 20130K [0x0000000716700000, 0x0000000731b80000, 0x00000007c0000000)
|
||||
eden space 393216K, 0% used [0x0000000716700000,0x0000000716700000,0x000000072e700000)
|
||||
from space 20480K, 98% used [0x0000000730780000,0x0000000731b289d0,0x0000000731b80000)
|
||||
to space 25088K, 0% used [0x000000072ea80000,0x000000072ea80000,0x0000000730300000)
|
||||
ParOldGen total 408064K, used 21210K [0x00000005c3400000, 0x00000005dc280000, 0x0000000716700000)
|
||||
object space 408064K, 5% used [0x00000005c3400000,0x00000005c48b6ba0,0x00000005dc280000)
|
||||
Metaspace used 56210K, capacity 59082K, committed 59160K, reserved 1101824K
|
||||
class space used 6888K, capacity 7436K, committed 7472K, reserved 1048576K
|
||||
}
|
||||
Event: 4.066 GC heap before
|
||||
{Heap before GC invocations=9 (full 3):
|
||||
PSYoungGen total 413696K, used 20130K [0x0000000716700000, 0x0000000731b80000, 0x00000007c0000000)
|
||||
eden space 393216K, 0% used [0x0000000716700000,0x0000000716700000,0x000000072e700000)
|
||||
from space 20480K, 98% used [0x0000000730780000,0x0000000731b289d0,0x0000000731b80000)
|
||||
to space 25088K, 0% used [0x000000072ea80000,0x000000072ea80000,0x0000000730300000)
|
||||
ParOldGen total 408064K, used 21210K [0x00000005c3400000, 0x00000005dc280000, 0x0000000716700000)
|
||||
object space 408064K, 5% used [0x00000005c3400000,0x00000005c48b6ba0,0x00000005dc280000)
|
||||
Metaspace used 56210K, capacity 59082K, committed 59160K, reserved 1101824K
|
||||
class space used 6888K, capacity 7436K, committed 7472K, reserved 1048576K
|
||||
Event: 4.132 GC heap after
|
||||
Heap after GC invocations=9 (full 3):
|
||||
PSYoungGen total 413696K, used 0K [0x0000000716700000, 0x0000000731b80000, 0x00000007c0000000)
|
||||
eden space 393216K, 0% used [0x0000000716700000,0x0000000716700000,0x000000072e700000)
|
||||
from space 20480K, 0% used [0x0000000730780000,0x0000000730780000,0x0000000731b80000)
|
||||
to space 25088K, 0% used [0x000000072ea80000,0x000000072ea80000,0x0000000730300000)
|
||||
ParOldGen total 608768K, used 32122K [0x00000005c3400000, 0x00000005e8680000, 0x0000000716700000)
|
||||
object space 608768K, 5% used [0x00000005c3400000,0x00000005c535e8b0,0x00000005e8680000)
|
||||
Metaspace used 56210K, capacity 59082K, committed 59160K, reserved 1101824K
|
||||
class space used 6888K, capacity 7436K, committed 7472K, reserved 1048576K
|
||||
}
|
||||
|
||||
Deoptimization events (0 events):
|
||||
No events
|
||||
|
||||
Classes redefined (0 events):
|
||||
No events
|
||||
|
||||
Internal exceptions (10 events):
|
||||
Event: 4.209 Thread 0x00000000302d2000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException'> (0x00000007183cfb70) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\runtime\sharedRuntime.cpp, line 605]
|
||||
Event: 4.210 Thread 0x00000000302d2000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException'> (0x000000071843ec78) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\runtime\sharedRuntime.cpp, line 605]
|
||||
Event: 4.210 Thread 0x00000000302d2000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException'> (0x00000007184403e0) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\runtime\sharedRuntime.cpp, line 605]
|
||||
Event: 4.210 Thread 0x00000000302d2000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException'> (0x0000000718441b00) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\runtime\sharedRuntime.cpp, line 605]
|
||||
Event: 4.210 Thread 0x00000000302d2000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException'> (0x00000007184468b8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\runtime\sharedRuntime.cpp, line 605]
|
||||
Event: 4.210 Thread 0x00000000302d2000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException'> (0x0000000718448f90) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\runtime\sharedRuntime.cpp, line 605]
|
||||
Event: 4.210 Thread 0x00000000302d2000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException'> (0x000000071844a6d8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\runtime\sharedRuntime.cpp, line 605]
|
||||
Event: 4.210 Thread 0x00000000302d2000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException'> (0x000000071844bdd8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\runtime\sharedRuntime.cpp, line 605]
|
||||
Event: 4.210 Thread 0x00000000302d2000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException'> (0x000000071844d320) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\runtime\sharedRuntime.cpp, line 605]
|
||||
Event: 4.492 Thread 0x00000000302d2000 Exception <a 'java/lang/ArrayIndexOutOfBoundsException'> (0x0000000718c4e720) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\runtime\sharedRuntime.cpp, line 605]
|
||||
|
||||
Events (10 events):
|
||||
Event: 4.551 loading class org/gdal/ogr/FieldDefn done
|
||||
Event: 4.582 loading class org/gdal/ogr/FeatureDefn
|
||||
Event: 4.582 loading class org/gdal/ogr/FeatureDefn done
|
||||
Event: 4.583 loading class org/gdal/ogr/Feature
|
||||
Event: 4.583 loading class org/gdal/ogr/Feature done
|
||||
Event: 4.583 loading class org/gdal/ogr/FeatureNative
|
||||
Event: 4.583 loading class org/gdal/ogr/FeatureNative done
|
||||
Event: 4.583 loading class org/gdal/ogr/FeatureNative$1
|
||||
Event: 4.583 loading class org/gdal/ogr/FeatureNative$1 done
|
||||
Event: 4.584 Thread 0x0000000030aed000 Thread added: 0x0000000030aed000
|
||||
|
||||
|
||||
Dynamic libraries:
|
||||
0x00007ff600c30000 - 0x00007ff600c67000 E:\Java\jdk1.8.0_201\bin\java.exe
|
||||
0x00007ffc4d510000 - 0x00007ffc4d708000 C:\Windows\SYSTEM32\ntdll.dll
|
||||
0x00007ffc4bd90000 - 0x00007ffc4be52000 C:\Windows\System32\KERNEL32.DLL
|
||||
0x00007ffc4b100000 - 0x00007ffc4b3f6000 C:\Windows\System32\KERNELBASE.dll
|
||||
0x00007ffc4c230000 - 0x00007ffc4c2e1000 C:\Windows\System32\ADVAPI32.dll
|
||||
0x00007ffc4b6e0000 - 0x00007ffc4b77e000 C:\Windows\System32\msvcrt.dll
|
||||
0x00007ffc4b990000 - 0x00007ffc4ba2f000 C:\Windows\System32\sechost.dll
|
||||
0x00007ffc4c100000 - 0x00007ffc4c223000 C:\Windows\System32\RPCRT4.dll
|
||||
0x00007ffc4ad40000 - 0x00007ffc4ad67000 C:\Windows\System32\bcrypt.dll
|
||||
0x00007ffc4b540000 - 0x00007ffc4b6dd000 C:\Windows\System32\USER32.dll
|
||||
0x00007ffc4b400000 - 0x00007ffc4b422000 C:\Windows\System32\win32u.dll
|
||||
0x00007ffc4d320000 - 0x00007ffc4d34b000 C:\Windows\System32\GDI32.dll
|
||||
0x00007ffc4ae80000 - 0x00007ffc4af99000 C:\Windows\System32\gdi32full.dll
|
||||
0x00007ffc4aba0000 - 0x00007ffc4ac3d000 C:\Windows\System32\msvcp_win.dll
|
||||
0x00007ffc4b430000 - 0x00007ffc4b530000 C:\Windows\System32\ucrtbase.dll
|
||||
0x00007ffc3c640000 - 0x00007ffc3c8da000 C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.19041.5915_none_60b4b9d171f9c7c7\COMCTL32.dll
|
||||
0x00007ffc4d2f0000 - 0x00007ffc4d31f000 C:\Windows\System32\IMM32.DLL
|
||||
0x000000006a930000 - 0x000000006aa01000 E:\Java\jdk1.8.0_201\jre\bin\msvcr100.dll
|
||||
0x000000006a080000 - 0x000000006a924000 E:\Java\jdk1.8.0_201\jre\bin\server\jvm.dll
|
||||
0x00007ffc4c420000 - 0x00007ffc4c428000 C:\Windows\System32\PSAPI.DLL
|
||||
0x00007ffc47420000 - 0x00007ffc47429000 C:\Windows\SYSTEM32\WSOCK32.dll
|
||||
0x00007ffc46f80000 - 0x00007ffc46f8a000 C:\Windows\SYSTEM32\VERSION.dll
|
||||
0x00007ffc41df0000 - 0x00007ffc41e17000 C:\Windows\SYSTEM32\WINMM.dll
|
||||
0x00007ffc4cd00000 - 0x00007ffc4cd6b000 C:\Windows\System32\WS2_32.dll
|
||||
0x00007ffc47410000 - 0x00007ffc4741f000 E:\Java\jdk1.8.0_201\jre\bin\verify.dll
|
||||
0x00007ffc473e0000 - 0x00007ffc47409000 E:\Java\jdk1.8.0_201\jre\bin\java.dll
|
||||
0x00007ffc456a0000 - 0x00007ffc456c3000 E:\Java\jdk1.8.0_201\jre\bin\instrument.dll
|
||||
0x00007ffc43d30000 - 0x00007ffc43d46000 E:\Java\jdk1.8.0_201\jre\bin\zip.dll
|
||||
0x00007ffc4c590000 - 0x00007ffc4ccfe000 C:\Windows\System32\SHELL32.dll
|
||||
0x00007ffc48c20000 - 0x00007ffc493c4000 C:\Windows\SYSTEM32\windows.storage.dll
|
||||
0x00007ffc4ba30000 - 0x00007ffc4bd83000 C:\Windows\System32\combase.dll
|
||||
0x00007ffc4a5d0000 - 0x00007ffc4a5fb000 C:\Windows\SYSTEM32\Wldp.dll
|
||||
0x00007ffc4d350000 - 0x00007ffc4d41d000 C:\Windows\System32\OLEAUT32.dll
|
||||
0x00007ffc4cd70000 - 0x00007ffc4ce1d000 C:\Windows\System32\SHCORE.dll
|
||||
0x00007ffc4b930000 - 0x00007ffc4b98b000 C:\Windows\System32\shlwapi.dll
|
||||
0x00007ffc4aad0000 - 0x00007ffc4aaf5000 C:\Windows\SYSTEM32\profapi.dll
|
||||
0x00007ffbfbf40000 - 0x00007ffbfbf5a000 E:\Java\jdk1.8.0_201\jre\bin\net.dll
|
||||
0x00007ffc3f5e0000 - 0x00007ffc3f7d0000 C:\Windows\SYSTEM32\urlmon.dll
|
||||
0x00007ffc3f2f0000 - 0x00007ffc3f5af000 C:\Windows\SYSTEM32\iertutil.dll
|
||||
0x00007ffc3f5b0000 - 0x00007ffc3f5d8000 C:\Windows\SYSTEM32\srvcli.dll
|
||||
0x00007ffc4a000000 - 0x00007ffc4a00c000 C:\Windows\SYSTEM32\netutils.dll
|
||||
0x00007ffc4a330000 - 0x00007ffc4a39a000 C:\Windows\system32\mswsock.dll
|
||||
0x00007ffc4a010000 - 0x00007ffc4a0da000 C:\Windows\SYSTEM32\DNSAPI.dll
|
||||
0x00007ffc49fc0000 - 0x00007ffc49ffb000 C:\Windows\SYSTEM32\IPHLPAPI.DLL
|
||||
0x00007ffc4b530000 - 0x00007ffc4b538000 C:\Windows\System32\NSI.dll
|
||||
0x00007ffc44d70000 - 0x00007ffc44d7a000 C:\Windows\System32\rasadhlp.dll
|
||||
0x00007ffc43240000 - 0x00007ffc432c0000 C:\Windows\System32\fwpuclnt.dll
|
||||
0x00007ffc45150000 - 0x00007ffc4515d000 E:\Java\jdk1.8.0_201\jre\bin\management.dll
|
||||
0x00007ffbf80e0000 - 0x00007ffbf80f1000 E:\Java\jdk1.8.0_201\jre\bin\nio.dll
|
||||
0x00007ffc4a520000 - 0x00007ffc4a538000 C:\Windows\SYSTEM32\CRYPTSP.dll
|
||||
0x00007ffc49be0000 - 0x00007ffc49c18000 C:\Windows\system32\rsaenh.dll
|
||||
0x00007ffc4aa90000 - 0x00007ffc4aabe000 C:\Windows\SYSTEM32\USERENV.dll
|
||||
0x00007ffc4ad70000 - 0x00007ffc4adf2000 C:\Windows\System32\bcryptprimitives.dll
|
||||
0x00007ffc4a540000 - 0x00007ffc4a54c000 C:\Windows\SYSTEM32\CRYPTBASE.dll
|
||||
0x00007ffc451a0000 - 0x00007ffc451b7000 C:\Windows\SYSTEM32\dhcpcsvc6.DLL
|
||||
0x00007ffc45180000 - 0x00007ffc4519d000 C:\Windows\SYSTEM32\dhcpcsvc.DLL
|
||||
0x00007ffc34ce0000 - 0x00007ffc34cf7000 C:\Windows\system32\napinsp.dll
|
||||
0x00007ffc302b0000 - 0x00007ffc302cb000 C:\Windows\system32\pnrpnsp.dll
|
||||
0x00007ffc30290000 - 0x00007ffc302ad000 C:\Windows\system32\wshbth.dll
|
||||
0x00007ffc455f0000 - 0x00007ffc4560d000 C:\Windows\system32\NLAapi.dll
|
||||
0x00007ffc30270000 - 0x00007ffc30282000 C:\Windows\System32\winrnr.dll
|
||||
0x00007ffc3abe0000 - 0x00007ffc3ac31000 C:\Windows\SYSTEM32\pdh.dll
|
||||
0x00007ffc43d20000 - 0x00007ffc43d2f000 C:\Windows\System32\perfproc.dll
|
||||
0x00007ffc1a870000 - 0x00007ffc1a87f000 C:\Windows\System32\perfos.dll
|
||||
0x00007ffc1b9c0000 - 0x00007ffc1b9e4000 E:\Java\jdk1.8.0_201\jre\bin\sunec.dll
|
||||
0x00007ffc35b60000 - 0x00007ffc35c08000 E:\Java\jdk1.8.0_201\bin\gdalalljni.dll
|
||||
0x00007ffc359f0000 - 0x00007ffc35a7d000 E:\Java\jdk1.8.0_201\bin\MSVCP140.dll
|
||||
0x00007ffbecbd0000 - 0x00007ffbee01d000 E:\Java\jdk1.8.0_201\bin\gdal.dll
|
||||
0x00007ffc438e0000 - 0x00007ffc438fb000 E:\Java\jdk1.8.0_201\bin\VCRUNTIME140.dll
|
||||
0x00007ffc43cf0000 - 0x00007ffc43cfc000 E:\Java\jdk1.8.0_201\bin\VCRUNTIME140_1.dll
|
||||
0x00007ffc4afa0000 - 0x00007ffc4b0fd000 C:\Windows\System32\CRYPT32.dll
|
||||
0x00007ffc433a0000 - 0x00007ffc433b9000 E:\Java\jdk1.8.0_201\bin\zlib.dll
|
||||
0x00007ffc4c2f0000 - 0x00007ffc4c41b000 C:\Windows\System32\ole32.dll
|
||||
0x00007ffc358c0000 - 0x00007ffc35953000 E:\Java\jdk1.8.0_201\bin\libcurl.dll
|
||||
0x00007ffc249e0000 - 0x00007ffc24aa0000 C:\Windows\SYSTEM32\ODBC32.dll
|
||||
0x00007ffc1c440000 - 0x00007ffc1c5a3000 E:\Java\jdk1.8.0_201\bin\libxml2.dll
|
||||
0x00007ffbec6f0000 - 0x00007ffbecbc2000 E:\Java\jdk1.8.0_201\bin\libcrypto-3-x64.dll
|
||||
0x00007ffc1c300000 - 0x00007ffc1c439000 E:\Java\jdk1.8.0_201\bin\libssl-3-x64.dll
|
||||
0x00007ffc4c450000 - 0x00007ffc4c4af000 C:\Windows\System32\WLDAP32.dll
|
||||
0x00007ffc257a0000 - 0x00007ffc25854000 E:\Java\jdk1.8.0_201\bin\zstd.dll
|
||||
0x00007ffc1bfa0000 - 0x00007ffc1c2fa000 E:\Java\jdk1.8.0_201\bin\proj_9.dll
|
||||
0x00007ffc19400000 - 0x00007ffc196ab000 E:\Java\jdk1.8.0_201\bin\xerces-c_3_2.dll
|
||||
0x00007ffc3bec0000 - 0x00007ffc3bef5000 E:\Java\jdk1.8.0_201\bin\libpng16.dll
|
||||
0x00007ffbf7f90000 - 0x00007ffbf80dd000 E:\Java\jdk1.8.0_201\bin\tiff.dll
|
||||
0x0000000180000000 - 0x000000018004e000 E:\Java\jdk1.8.0_201\bin\LIBPQ.dll
|
||||
0x00007ffc35b00000 - 0x00007ffc35b51000 E:\Java\jdk1.8.0_201\bin\openjp2.dll
|
||||
0x00007ffbec420000 - 0x00007ffbec6e8000 E:\Java\jdk1.8.0_201\bin\sqlite3.dll
|
||||
0x00007ffc3bea0000 - 0x00007ffc3bec0000 E:\Java\jdk1.8.0_201\bin\pcre.dll
|
||||
0x00007ffc359c0000 - 0x00007ffc359e9000 E:\Java\jdk1.8.0_201\bin\freexl.dll
|
||||
0x00007ffc35990000 - 0x00007ffc359b2000 E:\Java\jdk1.8.0_201\bin\ogdi.dll
|
||||
0x00007ffbd1960000 - 0x00007ffbd264b000 E:\Java\jdk1.8.0_201\bin\spatialite.dll
|
||||
0x00007ffbe86e0000 - 0x00007ffbe8d81000 E:\Java\jdk1.8.0_201\bin\libmysql.dll
|
||||
0x00007ffc35890000 - 0x00007ffc358ba000 E:\Java\jdk1.8.0_201\bin\libexpat.dll
|
||||
0x00007ffbfac00000 - 0x00007ffbfacff000 E:\Java\jdk1.8.0_201\bin\iconv-2.dll
|
||||
0x00007ffc35830000 - 0x00007ffc3588c000 E:\Java\jdk1.8.0_201\bin\geos_c.dll
|
||||
0x00007ffc3d020000 - 0x00007ffc3d02c000 C:\Windows\SYSTEM32\Secur32.dll
|
||||
0x00007ffc4a990000 - 0x00007ffc4a99a000 C:\Windows\SYSTEM32\DPAPI.DLL
|
||||
0x00007ffbe8500000 - 0x00007ffbe86d5000 E:\Java\jdk1.8.0_201\bin\geos.dll
|
||||
0x00007ffc4aa50000 - 0x00007ffc4aa82000 C:\Windows\SYSTEM32\SSPICLI.DLL
|
||||
0x00007ffc357a0000 - 0x00007ffc35807000 E:\gdal\bin\gdalplugins\ogr_FileGDB.dll
|
||||
0x00007ffbb1770000 - 0x00007ffbb22f2000 E:\Java\jdk1.8.0_201\bin\FileGDBAPI.dll
|
||||
0x00007ffc485d0000 - 0x00007ffc487d1000 C:\Windows\SYSTEM32\dbghelp.dll
|
||||
|
||||
VM Arguments:
|
||||
jvm_args: -XX:TieredStopAtLevel=1 -Xverify:none -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dmanagement.endpoints.jmx.exposure.include=* -javaagent:E:\Program Files\JetBrains\IntelliJ IDEA 2025.1.1.1\lib\idea_rt.jar=56029 -Dfile.encoding=UTF-8
|
||||
java_command: cn.edu.whu.boot.BootApplication
|
||||
java_class_path (initial): E:\Java\jdk1.8.0_201\jre\lib\charsets.jar;E:\Java\jdk1.8.0_201\jre\lib\deploy.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;E:\Java\jdk1.8.0_201\jre\lib\javaws.jar;E:\Java\jdk1.8.0_201\jre\lib\jce.jar;E:\Java\jdk1.8.0_201\jre\lib\jfr.jar;E:\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;E:\Java\jdk1.8.0_201\jre\lib\jsse.jar;E:\Java\jdk1.8.0_201\jre\lib\management-agent.jar;E:\Java\jdk1.8.0_201\jre\lib\plugin.jar;E:\Java\jdk1.8.0_201\jre\lib\resources.jar;E:\Java\jdk1.8.0_201\jre\lib\rt.jar;E:\503\TJ_project\lydc_backend\target\classes;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.3.0.RELEASE\spring-boot-starter-web-2.3.0.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter\2.3.0.RELEASE\spring-boot-starter-2.3.0.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot\2.3.0.RELEASE\spring-boot-2.3.0.RELEASE.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.3.0.RELEASE\spring-boot-starter-logging-2.3.0.RELEASE.jar;C:\Users\Administrator\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Administrator\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Administrator\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.13.2\log4j-to-slf4j-2.13.2.jar;C:\Users\Administrator\.m2\repository\org\apache\logging\log4j\log4j-a
|
||||
Launcher Type: SUN_STANDARD
|
||||
|
||||
Environment Variables:
|
||||
JAVA_HOME=E:\Java\jdk1.8.0_201
|
||||
PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Git\cmd;E:\gdal\bin;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;;E:\Program Files\JetBrains\IntelliJ IDEA 2025.1.1.1\bin;
|
||||
USERNAME=Administrator
|
||||
OS=Windows_NT
|
||||
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 183 Stepping 1, GenuineIntel
|
||||
|
||||
|
||||
|
||||
--------------- S Y S T E M ---------------
|
||||
|
||||
OS: Windows 10.0 , 64 bit Build 19041 (10.0.19041.5915)
|
||||
|
||||
CPU:total 28 (initial active 28) (14 cores per cpu, 2 threads per core) family 6 model 183 stepping 1, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, avx2, aes, clmul, erms, 3dnowpref, lzcnt, ht, tsc, tscinvbit, bmi1, bmi2, adx
|
||||
|
||||
Memory: 4k page, physical 33338604k(21598564k free), swap 38319340k(23322232k free)
|
||||
|
||||
vm_info: Java HotSpot(TM) 64-Bit Server VM (25.201-b09) for windows-amd64 JRE (1.8.0_201-b09), built on Dec 15 2018 18:36:39 by "java_re" with MS VC++ 10.0 (VS2010)
|
||||
|
||||
time: Mon Nov 03 22:03:53 2025
|
||||
timezone: <20>й<EFBFBD><D0B9><EFBFBD>ʱ<D7BC><CAB1>
|
||||
elapsed time: 4 seconds (0d 0h 0m 4s)
|
||||
|
||||
335
hs_err_pid26132.log
Normal file
335
hs_err_pid26132.log
Normal file
@@ -0,0 +1,335 @@
|
||||
#
|
||||
# There is insufficient memory for the Java Runtime Environment to continue.
|
||||
# Native memory allocation (malloc) failed to allocate 32744 bytes for ChunkPool::allocate
|
||||
# Possible reasons:
|
||||
# The system is out of physical RAM or swap space
|
||||
# The process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap
|
||||
# Possible solutions:
|
||||
# Reduce memory load on the system
|
||||
# Increase physical memory or swap space
|
||||
# Check if swap backing store is full
|
||||
# Decrease Java heap size (-Xmx/-Xms)
|
||||
# Decrease number of Java threads
|
||||
# Decrease Java thread stack sizes (-Xss)
|
||||
# Set larger code cache with -XX:ReservedCodeCacheSize=
|
||||
# JVM is running with Unscaled Compressed Oops mode in which the Java heap is
|
||||
# placed in the first 4GB address space. The Java Heap base address is the
|
||||
# maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress
|
||||
# to set the Java Heap base and to place the Java Heap above 4GB virtual address.
|
||||
# This output file may be truncated or incomplete.
|
||||
#
|
||||
# Out of Memory Error (allocation.cpp:273), pid=26132, tid=0x0000000000004654
|
||||
#
|
||||
# JRE version: Java(TM) SE Runtime Environment (8.0_201-b09) (build 1.8.0_201-b09)
|
||||
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.201-b09 mixed mode windows-amd64 compressed oops)
|
||||
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
|
||||
#
|
||||
|
||||
--------------- T H R E A D ---------------
|
||||
|
||||
Current thread (0x000000001a6d0800): JavaThread "C2 CompilerThread0" daemon [_thread_in_native, id=18004, stack(0x000000001ac80000,0x000000001ad80000)]
|
||||
|
||||
Stack: [0x000000001ac80000,0x000000001ad80000]
|
||||
[error occurred during error reporting (printing stack bounds), id 0xc0000005]
|
||||
|
||||
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
|
||||
|
||||
|
||||
Current CompileTask:
|
||||
C2: 4016 2672 4 java.net.URLClassLoader$1::run (5 bytes)
|
||||
|
||||
|
||||
--------------- P R O C E S S ---------------
|
||||
|
||||
Java Threads: ( => current thread )
|
||||
0x000000001a70c000 JavaThread "Service Thread" daemon [_thread_blocked, id=12020, stack(0x000000001b080000,0x000000001b180000)]
|
||||
0x000000001a707800 JavaThread "C1 CompilerThread3" daemon [_thread_blocked, id=2948, stack(0x000000001af80000,0x000000001b080000)]
|
||||
0x000000001a706800 JavaThread "C2 CompilerThread2" daemon [_thread_in_native, id=24492, stack(0x000000001ae80000,0x000000001af80000)]
|
||||
0x000000001a6a0000 JavaThread "C2 CompilerThread1" daemon [_thread_blocked, id=4248, stack(0x000000001ad80000,0x000000001ae80000)]
|
||||
=>0x000000001a6d0800 JavaThread "C2 CompilerThread0" daemon [_thread_in_native, id=18004, stack(0x000000001ac80000,0x000000001ad80000)]
|
||||
0x000000001a6cd000 JavaThread "Monitor Ctrl-Break" daemon [_thread_in_native, id=13804, stack(0x000000001ab80000,0x000000001ac80000)]
|
||||
0x0000000019c1a800 JavaThread "Attach Listener" daemon [_thread_blocked, id=14800, stack(0x000000001a280000,0x000000001a380000)]
|
||||
0x0000000019bc4000 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=10388, stack(0x000000001a180000,0x000000001a280000)]
|
||||
0x0000000017da5800 JavaThread "Finalizer" daemon [_thread_blocked, id=24888, stack(0x000000001a080000,0x000000001a180000)]
|
||||
0x0000000019ba0800 JavaThread "Reference Handler" daemon [_thread_blocked, id=14852, stack(0x0000000019f80000,0x000000001a080000)]
|
||||
0x0000000002cbb000 JavaThread "main" [_thread_in_vm, id=11252, stack(0x0000000002ae0000,0x0000000002be0000)]
|
||||
|
||||
Other Threads:
|
||||
0x0000000017d96800 VMThread [stack: 0x0000000019a80000,0x0000000019b80000] [id=23260]
|
||||
0x000000001a6a0800 WatcherThread [stack: 0x000000001b180000,0x000000001b280000] [id=6328]
|
||||
|
||||
VM state:not at safepoint (normal execution)
|
||||
|
||||
VM Mutex/Monitor currently owned by a thread: None
|
||||
|
||||
heap address: 0x0000000082800000, size: 2008 MB, Compressed Oops mode: 32-bit
|
||||
Narrow klass base: 0x0000000000000000, Narrow klass shift: 3
|
||||
Compressed class space size: 1073741824 Address: 0x0000000100000000
|
||||
|
||||
Heap:
|
||||
PSYoungGen total 70656K, used 48501K [0x00000000d6300000, 0x00000000dad00000, 0x0000000100000000)
|
||||
eden space 65536K, 68% used [0x00000000d6300000,0x00000000d8edf6b0,0x00000000da300000)
|
||||
from space 5120K, 69% used [0x00000000da300000,0x00000000da67ddb8,0x00000000da800000)
|
||||
to space 5120K, 0% used [0x00000000da800000,0x00000000da800000,0x00000000dad00000)
|
||||
ParOldGen total 61952K, used 8032K [0x0000000082800000, 0x0000000086480000, 0x00000000d6300000)
|
||||
object space 61952K, 12% used [0x0000000082800000,0x0000000082fd8168,0x0000000086480000)
|
||||
Metaspace used 25650K, capacity 26730K, committed 27008K, reserved 1073152K
|
||||
class space used 3158K, capacity 3363K, committed 3456K, reserved 1048576K
|
||||
|
||||
Card table byte_map: [0x0000000012270000,0x0000000012660000] byte_map_base: 0x0000000011e5c000
|
||||
|
||||
Marking Bits: (ParMarkBitMap*) 0x00000000520a4ce0
|
||||
Begin Bits: [0x0000000013100000, 0x0000000015060000)
|
||||
End Bits: [0x0000000015060000, 0x0000000016fc0000)
|
||||
|
||||
Polling page: 0x0000000000990000
|
||||
|
||||
CodeCache: size=245760Kb used=9587Kb max_used=9596Kb free=236172Kb
|
||||
bounds [0x0000000002eb0000, 0x0000000003820000, 0x0000000011eb0000]
|
||||
total_blobs=3151 nmethods=2784 adapters=278
|
||||
compilation: enabled
|
||||
|
||||
Compilation events (10 events):
|
||||
Event: 3.991 Thread 0x000000001a707800 nmethod 2783 0x0000000003810f50 code [0x0000000003811100, 0x00000000038116d0]
|
||||
Event: 3.993 Thread 0x000000001a707800 2784 3 sun.misc.ProxyGenerator$ProxyMethod::<init> (14 bytes)
|
||||
Event: 3.993 Thread 0x000000001a707800 nmethod 2784 0x0000000003811990 code [0x0000000003811b00, 0x0000000003811c88]
|
||||
Event: 3.993 Thread 0x000000001a707800 2785 3 sun.misc.ProxyGenerator$ProxyMethod::<init> (64 bytes)
|
||||
Event: 3.993 Thread 0x000000001a707800 nmethod 2785 0x0000000003811d50 code [0x0000000003811f20, 0x00000000038127c8]
|
||||
Event: 3.995 Thread 0x000000001a6a0000 nmethod 2780 0x0000000003815d90 code [0x0000000003815f00, 0x0000000003816458]
|
||||
Event: 3.998 Thread 0x000000001a707800 2786 3 org.springframework.beans.factory.support.AbstractBeanDefinition::resolveBeanClass (24 bytes)
|
||||
Event: 3.998 Thread 0x000000001a707800 nmethod 2786 0x0000000003815290 code [0x0000000003815440, 0x0000000003815b98]
|
||||
Event: 3.998 Thread 0x000000001a707800 2787 1 org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader$ConfigurationClassBeanDefinition::getFactoryMethodMetadata (5 bytes)
|
||||
Event: 3.999 Thread 0x000000001a707800 nmethod 2787 0x000000000380d710 code [0x000000000380d860, 0x000000000380d970]
|
||||
|
||||
GC Heap History (10 events):
|
||||
Event: 3.025 GC heap before
|
||||
{Heap before GC invocations=4 (full 0):
|
||||
PSYoungGen total 70656K, used 53941K [0x00000000d6300000, 0x00000000dad00000, 0x0000000100000000)
|
||||
eden space 65536K, 74% used [0x00000000d6300000,0x00000000d92afe28,0x00000000da300000)
|
||||
from space 5120K, 99% used [0x00000000da300000,0x00000000da7fd7a0,0x00000000da800000)
|
||||
to space 5120K, 0% used [0x00000000da800000,0x00000000da800000,0x00000000dad00000)
|
||||
ParOldGen total 86016K, used 5530K [0x0000000082800000, 0x0000000087c00000, 0x00000000d6300000)
|
||||
object space 86016K, 6% used [0x0000000082800000,0x0000000082d66800,0x0000000087c00000)
|
||||
Metaspace used 20448K, capacity 21212K, committed 21296K, reserved 1069056K
|
||||
class space used 2492K, capacity 2674K, committed 2688K, reserved 1048576K
|
||||
Event: 3.030 GC heap after
|
||||
Heap after GC invocations=4 (full 0):
|
||||
PSYoungGen total 70656K, used 5112K [0x00000000d6300000, 0x00000000dad00000, 0x0000000100000000)
|
||||
eden space 65536K, 0% used [0x00000000d6300000,0x00000000d6300000,0x00000000da300000)
|
||||
from space 5120K, 99% used [0x00000000da800000,0x00000000dacfe218,0x00000000dad00000)
|
||||
to space 5120K, 0% used [0x00000000da300000,0x00000000da300000,0x00000000da800000)
|
||||
ParOldGen total 86016K, used 8494K [0x0000000082800000, 0x0000000087c00000, 0x00000000d6300000)
|
||||
object space 86016K, 9% used [0x0000000082800000,0x000000008304b9e8,0x0000000087c00000)
|
||||
Metaspace used 20448K, capacity 21212K, committed 21296K, reserved 1069056K
|
||||
class space used 2492K, capacity 2674K, committed 2688K, reserved 1048576K
|
||||
}
|
||||
Event: 3.030 GC heap before
|
||||
{Heap before GC invocations=5 (full 1):
|
||||
PSYoungGen total 70656K, used 5112K [0x00000000d6300000, 0x00000000dad00000, 0x0000000100000000)
|
||||
eden space 65536K, 0% used [0x00000000d6300000,0x00000000d6300000,0x00000000da300000)
|
||||
from space 5120K, 99% used [0x00000000da800000,0x00000000dacfe218,0x00000000dad00000)
|
||||
to space 5120K, 0% used [0x00000000da300000,0x00000000da300000,0x00000000da800000)
|
||||
ParOldGen total 86016K, used 8494K [0x0000000082800000, 0x0000000087c00000, 0x00000000d6300000)
|
||||
object space 86016K, 9% used [0x0000000082800000,0x000000008304b9e8,0x0000000087c00000)
|
||||
Metaspace used 20448K, capacity 21212K, committed 21296K, reserved 1069056K
|
||||
class space used 2492K, capacity 2674K, committed 2688K, reserved 1048576K
|
||||
Event: 3.067 GC heap after
|
||||
Heap after GC invocations=5 (full 1):
|
||||
PSYoungGen total 70656K, used 0K [0x00000000d6300000, 0x00000000dad00000, 0x0000000100000000)
|
||||
eden space 65536K, 0% used [0x00000000d6300000,0x00000000d6300000,0x00000000da300000)
|
||||
from space 5120K, 0% used [0x00000000da800000,0x00000000da800000,0x00000000dad00000)
|
||||
to space 5120K, 0% used [0x00000000da300000,0x00000000da300000,0x00000000da800000)
|
||||
ParOldGen total 61952K, used 8008K [0x0000000082800000, 0x0000000086480000, 0x00000000d6300000)
|
||||
object space 61952K, 12% used [0x0000000082800000,0x0000000082fd2168,0x0000000086480000)
|
||||
Metaspace used 20448K, capacity 21212K, committed 21296K, reserved 1069056K
|
||||
class space used 2492K, capacity 2674K, committed 2688K, reserved 1048576K
|
||||
}
|
||||
Event: 3.218 GC heap before
|
||||
{Heap before GC invocations=6 (full 1):
|
||||
PSYoungGen total 70656K, used 65536K [0x00000000d6300000, 0x00000000dad00000, 0x0000000100000000)
|
||||
eden space 65536K, 100% used [0x00000000d6300000,0x00000000da300000,0x00000000da300000)
|
||||
from space 5120K, 0% used [0x00000000da800000,0x00000000da800000,0x00000000dad00000)
|
||||
to space 5120K, 0% used [0x00000000da300000,0x00000000da300000,0x00000000da800000)
|
||||
ParOldGen total 61952K, used 8008K [0x0000000082800000, 0x0000000086480000, 0x00000000d6300000)
|
||||
object space 61952K, 12% used [0x0000000082800000,0x0000000082fd2168,0x0000000086480000)
|
||||
Metaspace used 21384K, capacity 22234K, committed 22576K, reserved 1069056K
|
||||
class space used 2605K, capacity 2819K, committed 2944K, reserved 1048576K
|
||||
Event: 3.219 GC heap after
|
||||
Heap after GC invocations=6 (full 1):
|
||||
PSYoungGen total 70656K, used 1574K [0x00000000d6300000, 0x00000000dad00000, 0x0000000100000000)
|
||||
eden space 65536K, 0% used [0x00000000d6300000,0x00000000d6300000,0x00000000da300000)
|
||||
from space 5120K, 30% used [0x00000000da300000,0x00000000da489a78,0x00000000da800000)
|
||||
to space 5120K, 0% used [0x00000000da800000,0x00000000da800000,0x00000000dad00000)
|
||||
ParOldGen total 61952K, used 8016K [0x0000000082800000, 0x0000000086480000, 0x00000000d6300000)
|
||||
object space 61952K, 12% used [0x0000000082800000,0x0000000082fd4168,0x0000000086480000)
|
||||
Metaspace used 21384K, capacity 22234K, committed 22576K, reserved 1069056K
|
||||
class space used 2605K, capacity 2819K, committed 2944K, reserved 1048576K
|
||||
}
|
||||
Event: 3.318 GC heap before
|
||||
{Heap before GC invocations=7 (full 1):
|
||||
PSYoungGen total 70656K, used 67110K [0x00000000d6300000, 0x00000000dad00000, 0x0000000100000000)
|
||||
eden space 65536K, 100% used [0x00000000d6300000,0x00000000da300000,0x00000000da300000)
|
||||
from space 5120K, 30% used [0x00000000da300000,0x00000000da489a78,0x00000000da800000)
|
||||
to space 5120K, 0% used [0x00000000da800000,0x00000000da800000,0x00000000dad00000)
|
||||
ParOldGen total 61952K, used 8016K [0x0000000082800000, 0x0000000086480000, 0x00000000d6300000)
|
||||
object space 61952K, 12% used [0x0000000082800000,0x0000000082fd4168,0x0000000086480000)
|
||||
Metaspace used 21584K, capacity 22454K, committed 22576K, reserved 1069056K
|
||||
class space used 2627K, capacity 2827K, committed 2944K, reserved 1048576K
|
||||
Event: 3.320 GC heap after
|
||||
Heap after GC invocations=7 (full 1):
|
||||
PSYoungGen total 70656K, used 1301K [0x00000000d6300000, 0x00000000dad00000, 0x0000000100000000)
|
||||
eden space 65536K, 0% used [0x00000000d6300000,0x00000000d6300000,0x00000000da300000)
|
||||
from space 5120K, 25% used [0x00000000da800000,0x00000000da9454b0,0x00000000dad00000)
|
||||
to space 5120K, 0% used [0x00000000da300000,0x00000000da300000,0x00000000da800000)
|
||||
ParOldGen total 61952K, used 8024K [0x0000000082800000, 0x0000000086480000, 0x00000000d6300000)
|
||||
object space 61952K, 12% used [0x0000000082800000,0x0000000082fd6168,0x0000000086480000)
|
||||
Metaspace used 21584K, capacity 22454K, committed 22576K, reserved 1069056K
|
||||
class space used 2627K, capacity 2827K, committed 2944K, reserved 1048576K
|
||||
}
|
||||
Event: 3.567 GC heap before
|
||||
{Heap before GC invocations=8 (full 1):
|
||||
PSYoungGen total 70656K, used 66837K [0x00000000d6300000, 0x00000000dad00000, 0x0000000100000000)
|
||||
eden space 65536K, 100% used [0x00000000d6300000,0x00000000da300000,0x00000000da300000)
|
||||
from space 5120K, 25% used [0x00000000da800000,0x00000000da9454b0,0x00000000dad00000)
|
||||
to space 5120K, 0% used [0x00000000da300000,0x00000000da300000,0x00000000da800000)
|
||||
ParOldGen total 61952K, used 8024K [0x0000000082800000, 0x0000000086480000, 0x00000000d6300000)
|
||||
object space 61952K, 12% used [0x0000000082800000,0x0000000082fd6168,0x0000000086480000)
|
||||
Metaspace used 23251K, capacity 24186K, committed 24320K, reserved 1071104K
|
||||
class space used 2847K, capacity 3043K, committed 3072K, reserved 1048576K
|
||||
Event: 3.569 GC heap after
|
||||
Heap after GC invocations=8 (full 1):
|
||||
PSYoungGen total 70656K, used 3575K [0x00000000d6300000, 0x00000000dad00000, 0x0000000100000000)
|
||||
eden space 65536K, 0% used [0x00000000d6300000,0x00000000d6300000,0x00000000da300000)
|
||||
from space 5120K, 69% used [0x00000000da300000,0x00000000da67ddb8,0x00000000da800000)
|
||||
to space 5120K, 0% used [0x00000000da800000,0x00000000da800000,0x00000000dad00000)
|
||||
ParOldGen total 61952K, used 8032K [0x0000000082800000, 0x0000000086480000, 0x00000000d6300000)
|
||||
object space 61952K, 12% used [0x0000000082800000,0x0000000082fd8168,0x0000000086480000)
|
||||
Metaspace used 23251K, capacity 24186K, committed 24320K, reserved 1071104K
|
||||
class space used 2847K, capacity 3043K, committed 3072K, reserved 1048576K
|
||||
}
|
||||
|
||||
Deoptimization events (10 events):
|
||||
Event: 3.304 Thread 0x0000000002cbb000 Uncommon trap: reason=array_check action=maybe_recompile pc=0x00000000035dfa40 method=java.util.AbstractCollection.toArray([Ljava/lang/Object;)[Ljava/lang/Object; @ 119
|
||||
Event: 3.305 Thread 0x0000000002cbb000 Uncommon trap: reason=array_check action=maybe_recompile pc=0x00000000035dfa40 method=java.util.AbstractCollection.toArray([Ljava/lang/Object;)[Ljava/lang/Object; @ 119
|
||||
Event: 3.305 Thread 0x0000000002cbb000 Uncommon trap: reason=array_check action=maybe_recompile pc=0x00000000035dfa40 method=java.util.AbstractCollection.toArray([Ljava/lang/Object;)[Ljava/lang/Object; @ 119
|
||||
Event: 3.397 Thread 0x0000000002cbb000 Uncommon trap: reason=unstable_if action=reinterpret pc=0x0000000003355080 method=java.util.regex.Matcher.reset()Ljava/util/regex/Matcher; @ 47
|
||||
Event: 3.408 Thread 0x0000000002cbb000 Uncommon trap: reason=unstable_if action=reinterpret pc=0x00000000034e4868 method=org.springframework.core.annotation.MergedAnnotationsCollection.isMappingForType(Lorg/springframework/core/annotation/AnnotationTypeMapping;Ljava/lang/Object;)Z @ 13
|
||||
Event: 3.706 Thread 0x0000000002cbb000 Uncommon trap: reason=unstable_if action=reinterpret pc=0x00000000036a5fec method=org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(Ljava/lang/String;)Lorg/springframework/beans/factory/support/RootBeanDefinition;
|
||||
Event: 3.716 Thread 0x0000000002cbb000 Uncommon trap: reason=unstable_if action=reinterpret pc=0x00000000036adb3c method=org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(Ljava/lang/String;Z)Ljava/lang/Object; @ 20
|
||||
Event: 3.904 Thread 0x0000000002cbb000 Uncommon trap: reason=unstable_if action=reinterpret pc=0x000000000373f3a4 method=org.springframework.core.ResolvableType$1.isAssignableFrom(Ljava/lang/Class;)Z @ 15
|
||||
Event: 3.979 Thread 0x0000000002cbb000 Uncommon trap: reason=unstable_if action=reinterpret pc=0x0000000003495788 method=org.springframework.util.ConcurrentReferenceHashMap$Segment.findInChain(Lorg/springframework/util/ConcurrentReferenceHashMap$Reference;Ljava/lang/Object;I)Lorg/springframewo
|
||||
Event: 3.979 Thread 0x0000000002cbb000 Uncommon trap: reason=unstable_if action=reinterpret pc=0x000000000348f468 method=org.springframework.util.ConcurrentReferenceHashMap$Segment.findInChain(Lorg/springframework/util/ConcurrentReferenceHashMap$Reference;Ljava/lang/Object;I)Lorg/springframewo
|
||||
|
||||
Classes redefined (0 events):
|
||||
No events
|
||||
|
||||
Internal exceptions (10 events):
|
||||
Event: 2.411 Thread 0x0000000002cbb000 Exception <a 'java/lang/ClassNotFoundException': org/springframework/beans/factory/AwareCustomizer> (0x00000000d9521960) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\classfile\systemDictionary.cpp, line 210
|
||||
Event: 2.412 Thread 0x0000000002cbb000 Exception <a 'java/lang/ClassNotFoundException': org/springframework/beans/factory/BeanClassLoaderAwareCustomizer> (0x00000000d954b098) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\classfile\systemDictionar
|
||||
Event: 2.412 Thread 0x0000000002cbb000 Exception <a 'java/lang/ClassNotFoundException': org/springframework/beans/factory/AwareCustomizer> (0x00000000d956dea0) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\classfile\systemDictionary.cpp, line 210
|
||||
Event: 2.413 Thread 0x0000000002cbb000 Exception <a 'java/lang/ClassNotFoundException': org/springframework/context/EnvironmentAwareCustomizer> (0x00000000d95922a8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\classfile\systemDictionary.cpp, lin
|
||||
Event: 2.413 Thread 0x0000000002cbb000 Exception <a 'java/lang/ClassNotFoundException': org/springframework/beans/factory/AwareCustomizer> (0x00000000d95b4f90) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\classfile\systemDictionary.cpp, line 210
|
||||
Event: 2.805 Thread 0x0000000002cbb000 Exception <a 'java/lang/NoSuchMethodError': java.lang.Object.lambda$or$2(Ljava/util/function/Predicate;Ljava/lang/Object;)Z> (0x00000000d6e032f8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\interpreter\lin
|
||||
Event: 2.928 Thread 0x0000000002cbb000 Exception <a 'java/lang/IncompatibleClassChangeError': Found class java.lang.Object, but interface was expected> (0x00000000d81e3a28) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\interpreter\linkResolver.cp
|
||||
Event: 2.967 Thread 0x0000000002cbb000 Exception <a 'java/lang/NoSuchMethodError': java.lang.Object.lambda$getAllAnnotationAttributes$0(Lorg/springframework/util/MultiValueMap;)Lorg/springframework/util/MultiValueMap;> (0x00000000d868ebe8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cyg
|
||||
Event: 2.968 Thread 0x0000000002cbb000 Exception <a 'java/lang/NoSuchMethodError': java.lang.Object.lambda$identity$2(Ljava/lang/Object;)Ljava/lang/Object;> (0x00000000d86a59a0) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\share\vm\interpreter\linkResolv
|
||||
Event: 3.685 Thread 0x0000000002cbb000 Exception <a 'java/lang/NoSuchMethodError': java.lang.Object.lambda$getRequiredAttribute$0(Ljava/lang/String;)Ljava/lang/IllegalArgumentException;> (0x00000000d6ca0680) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u201\12322\hotspot\src\s
|
||||
|
||||
Events (10 events):
|
||||
Event: 4.012 loading class org/springframework/cglib/core/ObjectSwitchCallback
|
||||
Event: 4.012 loading class org/springframework/cglib/core/ObjectSwitchCallback done
|
||||
Event: 4.013 loading class org/springframework/cglib/proxy/Enhancer$1
|
||||
Event: 4.013 loading class org/springframework/cglib/proxy/Enhancer$1 done
|
||||
Event: 4.013 loading class org/springframework/cglib/core/AbstractClassGenerator$Source
|
||||
Event: 4.013 loading class org/springframework/cglib/core/AbstractClassGenerator$Source done
|
||||
Event: 4.014 loading class org/springframework/cglib/proxy/Enhancer$EnhancerKey
|
||||
Event: 4.014 loading class org/springframework/cglib/proxy/Enhancer$EnhancerKey done
|
||||
Event: 4.014 loading class org/springframework/cglib/core/KeyFactory
|
||||
Event: 4.014 loading class org/springframework/cglib/core/KeyFactory done
|
||||
|
||||
|
||||
Dynamic libraries:
|
||||
0x00007ff6c8260000 - 0x00007ff6c8297000 E:\Java\jdk1.8.0_201\bin\java.exe
|
||||
0x00007ffd2e2d0000 - 0x00007ffd2e4c8000 C:\WINDOWS\SYSTEM32\ntdll.dll
|
||||
0x00007ffd2c600000 - 0x00007ffd2c6c2000 C:\WINDOWS\System32\KERNEL32.DLL
|
||||
0x00007ffd2be00000 - 0x00007ffd2c0ff000 C:\WINDOWS\System32\KERNELBASE.dll
|
||||
0x00007ffd2d210000 - 0x00007ffd2d2c1000 C:\WINDOWS\System32\ADVAPI32.dll
|
||||
0x00007ffd2cef0000 - 0x00007ffd2cf8e000 C:\WINDOWS\System32\msvcrt.dll
|
||||
0x00007ffd2cde0000 - 0x00007ffd2ce7f000 C:\WINDOWS\System32\sechost.dll
|
||||
0x00007ffd2c6f0000 - 0x00007ffd2c813000 C:\WINDOWS\System32\RPCRT4.dll
|
||||
0x00007ffd2ba00000 - 0x00007ffd2ba27000 C:\WINDOWS\System32\bcrypt.dll
|
||||
0x00007ffd2d010000 - 0x00007ffd2d1ad000 C:\WINDOWS\System32\USER32.dll
|
||||
0x00007ffd2c220000 - 0x00007ffd2c242000 C:\WINDOWS\System32\win32u.dll
|
||||
0x00007ffd2e260000 - 0x00007ffd2e28b000 C:\WINDOWS\System32\GDI32.dll
|
||||
0x00007ffd2c100000 - 0x00007ffd2c217000 C:\WINDOWS\System32\gdi32full.dll
|
||||
0x00007ffd2b960000 - 0x00007ffd2b9fd000 C:\WINDOWS\System32\msvcp_win.dll
|
||||
0x00007ffd2bba0000 - 0x00007ffd2bca0000 C:\WINDOWS\System32\ucrtbase.dll
|
||||
0x00007ffd1c6d0000 - 0x00007ffd1c96a000 C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.19041.4355_none_60b8b9eb71f62e16\COMCTL32.dll
|
||||
0x00007ffd2e230000 - 0x00007ffd2e25f000 C:\WINDOWS\System32\IMM32.DLL
|
||||
0x0000000052620000 - 0x00000000526f1000 E:\Java\jdk1.8.0_201\jre\bin\msvcr100.dll
|
||||
0x0000000051880000 - 0x0000000052124000 E:\Java\jdk1.8.0_201\jre\bin\server\jvm.dll
|
||||
0x00007ffd2cd20000 - 0x00007ffd2cd28000 C:\WINDOWS\System32\PSAPI.DLL
|
||||
0x00007ffd1eb90000 - 0x00007ffd1ebb7000 C:\WINDOWS\SYSTEM32\WINMM.dll
|
||||
0x00007ffd24c90000 - 0x00007ffd24c9a000 C:\WINDOWS\SYSTEM32\VERSION.dll
|
||||
0x00007ffd1b7f0000 - 0x00007ffd1b7f9000 C:\WINDOWS\SYSTEM32\WSOCK32.dll
|
||||
0x00007ffd2ce80000 - 0x00007ffd2ceeb000 C:\WINDOWS\System32\WS2_32.dll
|
||||
0x00007ffd247c0000 - 0x00007ffd247cf000 E:\Java\jdk1.8.0_201\jre\bin\verify.dll
|
||||
0x00007ffd1e290000 - 0x00007ffd1e2b9000 E:\Java\jdk1.8.0_201\jre\bin\java.dll
|
||||
0x00007ffd0c570000 - 0x00007ffd0c593000 E:\Java\jdk1.8.0_201\jre\bin\instrument.dll
|
||||
0x00007ffd234f0000 - 0x00007ffd23506000 E:\Java\jdk1.8.0_201\jre\bin\zip.dll
|
||||
0x00007ffd2d9f0000 - 0x00007ffd2e15e000 C:\WINDOWS\System32\SHELL32.dll
|
||||
0x00007ffd299e0000 - 0x00007ffd2a184000 C:\WINDOWS\SYSTEM32\windows.storage.dll
|
||||
0x00007ffd2c820000 - 0x00007ffd2cb75000 C:\WINDOWS\System32\combase.dll
|
||||
0x00007ffd2b2c0000 - 0x00007ffd2b2ef000 C:\WINDOWS\SYSTEM32\Wldp.dll
|
||||
0x00007ffd2e160000 - 0x00007ffd2e22d000 C:\WINDOWS\System32\OLEAUT32.dll
|
||||
0x00007ffd2cd30000 - 0x00007ffd2cddd000 C:\WINDOWS\System32\SHCORE.dll
|
||||
0x00007ffd2d400000 - 0x00007ffd2d455000 C:\WINDOWS\System32\shlwapi.dll
|
||||
0x00007ffd2b890000 - 0x00007ffd2b8b4000 C:\WINDOWS\SYSTEM32\profapi.dll
|
||||
0x00007ffd22910000 - 0x00007ffd2292a000 E:\Java\jdk1.8.0_201\jre\bin\net.dll
|
||||
0x00007ffd225b0000 - 0x00007ffd227a1000 C:\WINDOWS\SYSTEM32\urlmon.dll
|
||||
0x00007ffd21cb0000 - 0x00007ffd21f6f000 C:\WINDOWS\SYSTEM32\iertutil.dll
|
||||
0x00007ffd21c80000 - 0x00007ffd21ca8000 C:\WINDOWS\SYSTEM32\srvcli.dll
|
||||
0x00007ffd2ae10000 - 0x00007ffd2ae1c000 C:\WINDOWS\SYSTEM32\netutils.dll
|
||||
0x00007ffd2b020000 - 0x00007ffd2b08a000 C:\WINDOWS\system32\mswsock.dll
|
||||
0x00007ffd239a0000 - 0x00007ffd239ad000 E:\Java\jdk1.8.0_201\jre\bin\management.dll
|
||||
0x00007ffd1d090000 - 0x00007ffd1d0a7000 C:\WINDOWS\system32\napinsp.dll
|
||||
0x00007ffd1d030000 - 0x00007ffd1d04b000 C:\WINDOWS\system32\pnrpnsp.dll
|
||||
0x00007ffd269b0000 - 0x00007ffd269c5000 C:\WINDOWS\system32\wshbth.dll
|
||||
0x00007ffd26990000 - 0x00007ffd269ad000 C:\WINDOWS\system32\NLAapi.dll
|
||||
0x00007ffd2ad00000 - 0x00007ffd2ad3b000 C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL
|
||||
0x00007ffd2ad40000 - 0x00007ffd2ae0a000 C:\WINDOWS\SYSTEM32\DNSAPI.dll
|
||||
0x00007ffd2cd10000 - 0x00007ffd2cd18000 C:\WINDOWS\System32\NSI.dll
|
||||
0x00007ffd1cec0000 - 0x00007ffd1ced2000 C:\WINDOWS\System32\winrnr.dll
|
||||
0x00007ffd24c10000 - 0x00007ffd24c1a000 C:\Windows\System32\rasadhlp.dll
|
||||
0x00007ffd22470000 - 0x00007ffd224f0000 C:\WINDOWS\System32\fwpuclnt.dll
|
||||
0x00007ffd20b10000 - 0x00007ffd20b21000 E:\Java\jdk1.8.0_201\jre\bin\nio.dll
|
||||
|
||||
VM Arguments:
|
||||
jvm_args: -javaagent:E:\IntelliJ IDEA Community Edition 2024.3.4\lib\idea_rt.jar=55795 -Dfile.encoding=UTF-8
|
||||
java_command: cn.edu.whu.boot.BootApplication
|
||||
java_class_path (initial): E:\Java\jdk1.8.0_201\jre\lib\charsets.jar;E:\Java\jdk1.8.0_201\jre\lib\deploy.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;E:\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;E:\Java\jdk1.8.0_201\jre\lib\javaws.jar;E:\Java\jdk1.8.0_201\jre\lib\jce.jar;E:\Java\jdk1.8.0_201\jre\lib\jfr.jar;E:\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;E:\Java\jdk1.8.0_201\jre\lib\jsse.jar;E:\Java\jdk1.8.0_201\jre\lib\management-agent.jar;E:\Java\jdk1.8.0_201\jre\lib\plugin.jar;E:\Java\jdk1.8.0_201\jre\lib\resources.jar;E:\Java\jdk1.8.0_201\jre\lib\rt.jar;D:\TJ\Դ<><D4B4>\<5C><><EFBFBD><EFBFBD>\target\classes;C:\Users\dbc\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.3.0.RELEASE\spring-boot-starter-web-2.3.0.RELEASE.jar;C:\Users\dbc\.m2\repository\org\springframework\boot\spring-boot-starter\2.3.0.RELEASE\spring-boot-starter-2.3.0.RELEASE.jar;C:\Users\dbc\.m2\repository\org\springframework\boot\spring-boot\2.3.0.RELEASE\spring-boot-2.3.0.RELEASE.jar;C:\Users\dbc\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.3.0.RELEASE\spring-boot-starter-logging-2.3.0.RELEASE.jar;C:\Users\dbc\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\dbc\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\dbc\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.13.2\log4j-to-slf4j-2.13.2.jar;C:\Users\dbc\.m2\repository\org\apache\logging\log4j\log4j-api\2.13.2\log4j-api-2.13.2.jar;C:\Users\dbc\.m2\repository\org\slf4j\jul-to-slf4j\1.7.30\jul-to
|
||||
Launcher Type: SUN_STANDARD
|
||||
|
||||
Environment Variables:
|
||||
JAVA_HOME=E:\Java\jdk1.8.0_201
|
||||
PATH=C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\Intel\Shared Files\cpp\bin\Intel64;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\dotnet\;D:\Microsoft VS Code\bin;C:\Gridknow\zgdll32;C:\Gridknow\zgdll64;E:\Java\jdk1.8.0_201\bin;C:\Users\dbc\AppData\Local\Programs\Python\Python310;D:\Git\cmd;C:\Users\dbc\AppData\Local\Programs\Python\Python310\Scripts;D:\TJ\apache-maven-3.8.8-bin\apache-maven-3.8.8\bin;D:\nodejs\;C:\Program Files (x86)\Common Files\Intel\Shared Files\cpp\bin\Intel64;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\IBM\SPSS\Statistics\25\JRE\bin;C:\Program Files (x86)\dotnet\;D:\Microsoft VS Code\bin;C:\Program Files\MATLAB\R2021a\bin;C:\Users\dbc\AppData\Local\Programs\Python\Python310\Scripts;C:\Program Files (x86)\Microsoft\Edge\Application;D:\pycharm\PyCharm Community Edition 2023.1.3\bin;;E:\IntelliJ IDEA Community Edition 2024.3.4\bin;;E:\WebStorm 2024.3.4\bin;;C:\Users\dbc\AppData\Roaming\npm
|
||||
USERNAME=dbc
|
||||
OS=Windows_NT
|
||||
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 142 Stepping 12, GenuineIntel
|
||||
|
||||
|
||||
|
||||
--------------- S Y S T E M ---------------
|
||||
|
||||
OS: Windows 10.0 , 64 bit Build 19041 (10.0.19041.5198)
|
||||
|
||||
CPU:total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 142 stepping 12, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, avx2, aes, clmul, erms, 3dnowpref, lzcnt, ht, tsc, tscinvbit, bmi1, bmi2, adx
|
||||
|
||||
Memory: 4k page, physical 8218420k(1038732k free), swap 23270192k(1704k free)
|
||||
|
||||
vm_info: Java HotSpot(TM) 64-Bit Server VM (25.201-b09) for windows-amd64 JRE (1.8.0_201-b09), built on Dec 15 2018 18:36:39 by "java_re" with MS VC++ 10.0 (VS2010)
|
||||
|
||||
time: Fri Mar 07 23:36:20 2025
|
||||
timezone: <20>й<EFBFBD><D0B9><EFBFBD>ʱ<D7BC><CAB1>
|
||||
elapsed time: 4 seconds (0d 0h 0m 4s)
|
||||
|
||||
BIN
libs/gdal.jar
Normal file
BIN
libs/gdal.jar
Normal file
Binary file not shown.
BIN
libs/gdalalljni.dll
Normal file
BIN
libs/gdalalljni.dll
Normal file
Binary file not shown.
286
mvnw
vendored
Normal file
286
mvnw
vendored
Normal file
@@ -0,0 +1,286 @@
|
||||
#!/bin/sh
|
||||
# ----------------------------------------------------------------------------
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Maven2 Start Up Batch script
|
||||
#
|
||||
# Required ENV vars:
|
||||
# ------------------
|
||||
# JAVA_HOME - location of a JDK home dir
|
||||
#
|
||||
# Optional ENV vars
|
||||
# -----------------
|
||||
# M2_HOME - location of maven2's installed home dir
|
||||
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
|
||||
# e.g. to debug Maven itself, use
|
||||
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
|
||||
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
if [ -z "$MAVEN_SKIP_RC" ] ; then
|
||||
|
||||
if [ -f /etc/mavenrc ] ; then
|
||||
. /etc/mavenrc
|
||||
fi
|
||||
|
||||
if [ -f "$HOME/.mavenrc" ] ; then
|
||||
. "$HOME/.mavenrc"
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# OS specific support. $var _must_ be set to either true or false.
|
||||
cygwin=false;
|
||||
darwin=false;
|
||||
mingw=false
|
||||
case "`uname`" in
|
||||
CYGWIN*) cygwin=true ;;
|
||||
MINGW*) mingw=true;;
|
||||
Darwin*) darwin=true
|
||||
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
|
||||
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
|
||||
if [ -z "$JAVA_HOME" ]; then
|
||||
if [ -x "/usr/libexec/java_home" ]; then
|
||||
export JAVA_HOME="`/usr/libexec/java_home`"
|
||||
else
|
||||
export JAVA_HOME="/Library/Java/Home"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -z "$JAVA_HOME" ] ; then
|
||||
if [ -r /etc/gentoo-release ] ; then
|
||||
JAVA_HOME=`java-config --jre-home`
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$M2_HOME" ] ; then
|
||||
## resolve links - $0 may be a link to maven's home
|
||||
PRG="$0"
|
||||
|
||||
# need this for relative symlinks
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG="`dirname "$PRG"`/$link"
|
||||
fi
|
||||
done
|
||||
|
||||
saveddir=`pwd`
|
||||
|
||||
M2_HOME=`dirname "$PRG"`/..
|
||||
|
||||
# make it fully qualified
|
||||
M2_HOME=`cd "$M2_HOME" && pwd`
|
||||
|
||||
cd "$saveddir"
|
||||
# echo Using m2 at $M2_HOME
|
||||
fi
|
||||
|
||||
# For Cygwin, ensure paths are in UNIX format before anything is touched
|
||||
if $cygwin ; then
|
||||
[ -n "$M2_HOME" ] &&
|
||||
M2_HOME=`cygpath --unix "$M2_HOME"`
|
||||
[ -n "$JAVA_HOME" ] &&
|
||||
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
|
||||
[ -n "$CLASSPATH" ] &&
|
||||
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
|
||||
fi
|
||||
|
||||
# For Mingw, ensure paths are in UNIX format before anything is touched
|
||||
if $mingw ; then
|
||||
[ -n "$M2_HOME" ] &&
|
||||
M2_HOME="`(cd "$M2_HOME"; pwd)`"
|
||||
[ -n "$JAVA_HOME" ] &&
|
||||
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
|
||||
# TODO classpath?
|
||||
fi
|
||||
|
||||
if [ -z "$JAVA_HOME" ]; then
|
||||
javaExecutable="`which javac`"
|
||||
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
|
||||
# readlink(1) is not available as standard on Solaris 10.
|
||||
readLink=`which readlink`
|
||||
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
|
||||
if $darwin ; then
|
||||
javaHome="`dirname \"$javaExecutable\"`"
|
||||
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
|
||||
else
|
||||
javaExecutable="`readlink -f \"$javaExecutable\"`"
|
||||
fi
|
||||
javaHome="`dirname \"$javaExecutable\"`"
|
||||
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
|
||||
JAVA_HOME="$javaHome"
|
||||
export JAVA_HOME
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "$JAVACMD" ] ; then
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
else
|
||||
JAVACMD="`which java`"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
echo "Error: JAVA_HOME is not defined correctly." >&2
|
||||
echo " We cannot execute $JAVACMD" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$JAVA_HOME" ] ; then
|
||||
echo "Warning: JAVA_HOME environment variable is not set."
|
||||
fi
|
||||
|
||||
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
|
||||
|
||||
# traverses directory structure from process work directory to filesystem root
|
||||
# first directory with .mvn subdirectory is considered project base directory
|
||||
find_maven_basedir() {
|
||||
|
||||
if [ -z "$1" ]
|
||||
then
|
||||
echo "Path not specified to find_maven_basedir"
|
||||
return 1
|
||||
fi
|
||||
|
||||
basedir="$1"
|
||||
wdir="$1"
|
||||
while [ "$wdir" != '/' ] ; do
|
||||
if [ -d "$wdir"/.mvn ] ; then
|
||||
basedir=$wdir
|
||||
break
|
||||
fi
|
||||
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
|
||||
if [ -d "${wdir}" ]; then
|
||||
wdir=`cd "$wdir/.."; pwd`
|
||||
fi
|
||||
# end of workaround
|
||||
done
|
||||
echo "${basedir}"
|
||||
}
|
||||
|
||||
# concatenates all lines of a file
|
||||
concat_lines() {
|
||||
if [ -f "$1" ]; then
|
||||
echo "$(tr -s '\n' ' ' < "$1")"
|
||||
fi
|
||||
}
|
||||
|
||||
BASE_DIR=`find_maven_basedir "$(pwd)"`
|
||||
if [ -z "$BASE_DIR" ]; then
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
##########################################################################################
|
||||
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
|
||||
# This allows using the maven wrapper in projects that prohibit checking in binary data.
|
||||
##########################################################################################
|
||||
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Found .mvn/wrapper/maven-wrapper.jar"
|
||||
fi
|
||||
else
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
|
||||
fi
|
||||
jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"
|
||||
while IFS="=" read key value; do
|
||||
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
|
||||
esac
|
||||
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Downloading from: $jarUrl"
|
||||
fi
|
||||
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
|
||||
|
||||
if command -v wget > /dev/null; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Found wget ... using wget"
|
||||
fi
|
||||
wget "$jarUrl" -O "$wrapperJarPath"
|
||||
elif command -v curl > /dev/null; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Found curl ... using curl"
|
||||
fi
|
||||
curl -o "$wrapperJarPath" "$jarUrl"
|
||||
else
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo "Falling back to using Java to download"
|
||||
fi
|
||||
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
|
||||
if [ -e "$javaClass" ]; then
|
||||
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo " - Compiling MavenWrapperDownloader.java ..."
|
||||
fi
|
||||
# Compiling the Java class
|
||||
("$JAVA_HOME/bin/javac" "$javaClass")
|
||||
fi
|
||||
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
|
||||
# Running the downloader
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo " - Running MavenWrapperDownloader.java ..."
|
||||
fi
|
||||
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
##########################################################################################
|
||||
# End of extension
|
||||
##########################################################################################
|
||||
|
||||
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
echo $MAVEN_PROJECTBASEDIR
|
||||
fi
|
||||
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin; then
|
||||
[ -n "$M2_HOME" ] &&
|
||||
M2_HOME=`cygpath --path --windows "$M2_HOME"`
|
||||
[ -n "$JAVA_HOME" ] &&
|
||||
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
|
||||
[ -n "$CLASSPATH" ] &&
|
||||
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
|
||||
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
|
||||
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
|
||||
fi
|
||||
|
||||
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
|
||||
|
||||
exec "$JAVACMD" \
|
||||
$MAVEN_OPTS \
|
||||
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
|
||||
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
|
||||
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
|
||||
161
mvnw.cmd
vendored
Normal file
161
mvnw.cmd
vendored
Normal file
@@ -0,0 +1,161 @@
|
||||
@REM ----------------------------------------------------------------------------
|
||||
@REM Licensed to the Apache Software Foundation (ASF) under one
|
||||
@REM or more contributor license agreements. See the NOTICE file
|
||||
@REM distributed with this work for additional information
|
||||
@REM regarding copyright ownership. The ASF licenses this file
|
||||
@REM to you under the Apache License, Version 2.0 (the
|
||||
@REM "License"); you may not use this file except in compliance
|
||||
@REM with the License. You may obtain a copy of the License at
|
||||
@REM
|
||||
@REM https://www.apache.org/licenses/LICENSE-2.0
|
||||
@REM
|
||||
@REM Unless required by applicable law or agreed to in writing,
|
||||
@REM software distributed under the License is distributed on an
|
||||
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
@REM KIND, either express or implied. See the License for the
|
||||
@REM specific language governing permissions and limitations
|
||||
@REM under the License.
|
||||
@REM ----------------------------------------------------------------------------
|
||||
|
||||
@REM ----------------------------------------------------------------------------
|
||||
@REM Maven2 Start Up Batch script
|
||||
@REM
|
||||
@REM Required ENV vars:
|
||||
@REM JAVA_HOME - location of a JDK home dir
|
||||
@REM
|
||||
@REM Optional ENV vars
|
||||
@REM M2_HOME - location of maven2's installed home dir
|
||||
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
|
||||
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
|
||||
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
|
||||
@REM e.g. to debug Maven itself, use
|
||||
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
|
||||
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
|
||||
@REM ----------------------------------------------------------------------------
|
||||
|
||||
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
|
||||
@echo off
|
||||
@REM set title of command window
|
||||
title %0
|
||||
@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
|
||||
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
|
||||
|
||||
@REM set %HOME% to equivalent of $HOME
|
||||
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
|
||||
|
||||
@REM Execute a user defined script before this one
|
||||
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
|
||||
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
|
||||
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
|
||||
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
|
||||
:skipRcPre
|
||||
|
||||
@setlocal
|
||||
|
||||
set ERROR_CODE=0
|
||||
|
||||
@REM To isolate internal variables from possible post scripts, we use another setlocal
|
||||
@setlocal
|
||||
|
||||
@REM ==== START VALIDATION ====
|
||||
if not "%JAVA_HOME%" == "" goto OkJHome
|
||||
|
||||
echo.
|
||||
echo Error: JAVA_HOME not found in your environment. >&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the >&2
|
||||
echo location of your Java installation. >&2
|
||||
echo.
|
||||
goto error
|
||||
|
||||
:OkJHome
|
||||
if exist "%JAVA_HOME%\bin\java.exe" goto init
|
||||
|
||||
echo.
|
||||
echo Error: JAVA_HOME is set to an invalid directory. >&2
|
||||
echo JAVA_HOME = "%JAVA_HOME%" >&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the >&2
|
||||
echo location of your Java installation. >&2
|
||||
echo.
|
||||
goto error
|
||||
|
||||
@REM ==== END VALIDATION ====
|
||||
|
||||
:init
|
||||
|
||||
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
|
||||
@REM Fallback to current working directory if not found.
|
||||
|
||||
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
|
||||
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
|
||||
|
||||
set EXEC_DIR=%CD%
|
||||
set WDIR=%EXEC_DIR%
|
||||
:findBaseDir
|
||||
IF EXIST "%WDIR%"\.mvn goto baseDirFound
|
||||
cd ..
|
||||
IF "%WDIR%"=="%CD%" goto baseDirNotFound
|
||||
set WDIR=%CD%
|
||||
goto findBaseDir
|
||||
|
||||
:baseDirFound
|
||||
set MAVEN_PROJECTBASEDIR=%WDIR%
|
||||
cd "%EXEC_DIR%"
|
||||
goto endDetectBaseDir
|
||||
|
||||
:baseDirNotFound
|
||||
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
|
||||
cd "%EXEC_DIR%"
|
||||
|
||||
:endDetectBaseDir
|
||||
|
||||
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
|
||||
|
||||
@setlocal EnableExtensions EnableDelayedExpansion
|
||||
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
|
||||
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
|
||||
|
||||
:endReadAdditionalConfig
|
||||
|
||||
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
|
||||
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
|
||||
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
|
||||
|
||||
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"
|
||||
FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO (
|
||||
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
|
||||
)
|
||||
|
||||
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
|
||||
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
|
||||
if exist %WRAPPER_JAR% (
|
||||
echo Found %WRAPPER_JAR%
|
||||
) else (
|
||||
echo Couldn't find %WRAPPER_JAR%, downloading it ...
|
||||
echo Downloading from: %DOWNLOAD_URL%
|
||||
powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"
|
||||
echo Finished downloading %WRAPPER_JAR%
|
||||
)
|
||||
@REM End of extension
|
||||
|
||||
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
|
||||
if ERRORLEVEL 1 goto error
|
||||
goto end
|
||||
|
||||
:error
|
||||
set ERROR_CODE=1
|
||||
|
||||
:end
|
||||
@endlocal & set ERROR_CODE=%ERROR_CODE%
|
||||
|
||||
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
|
||||
@REM check for post script, once with legacy .bat ending and once with .cmd ending
|
||||
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
|
||||
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
|
||||
:skipRcPost
|
||||
|
||||
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
|
||||
if "%MAVEN_BATCH_PAUSE%" == "on" pause
|
||||
|
||||
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
|
||||
|
||||
exit /B %ERROR_CODE%
|
||||
26
nginx/conf/fastcgi.conf
Normal file
26
nginx/conf/fastcgi.conf
Normal file
@@ -0,0 +1,26 @@
|
||||
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
fastcgi_param QUERY_STRING $query_string;
|
||||
fastcgi_param REQUEST_METHOD $request_method;
|
||||
fastcgi_param CONTENT_TYPE $content_type;
|
||||
fastcgi_param CONTENT_LENGTH $content_length;
|
||||
|
||||
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
|
||||
fastcgi_param REQUEST_URI $request_uri;
|
||||
fastcgi_param DOCUMENT_URI $document_uri;
|
||||
fastcgi_param DOCUMENT_ROOT $document_root;
|
||||
fastcgi_param SERVER_PROTOCOL $server_protocol;
|
||||
fastcgi_param REQUEST_SCHEME $scheme;
|
||||
fastcgi_param HTTPS $https if_not_empty;
|
||||
|
||||
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
|
||||
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
|
||||
|
||||
fastcgi_param REMOTE_ADDR $remote_addr;
|
||||
fastcgi_param REMOTE_PORT $remote_port;
|
||||
fastcgi_param SERVER_ADDR $server_addr;
|
||||
fastcgi_param SERVER_PORT $server_port;
|
||||
fastcgi_param SERVER_NAME $server_name;
|
||||
|
||||
# PHP only, required if PHP was built with --enable-force-cgi-redirect
|
||||
fastcgi_param REDIRECT_STATUS 200;
|
||||
25
nginx/conf/fastcgi_params
Normal file
25
nginx/conf/fastcgi_params
Normal file
@@ -0,0 +1,25 @@
|
||||
|
||||
fastcgi_param QUERY_STRING $query_string;
|
||||
fastcgi_param REQUEST_METHOD $request_method;
|
||||
fastcgi_param CONTENT_TYPE $content_type;
|
||||
fastcgi_param CONTENT_LENGTH $content_length;
|
||||
|
||||
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
|
||||
fastcgi_param REQUEST_URI $request_uri;
|
||||
fastcgi_param DOCUMENT_URI $document_uri;
|
||||
fastcgi_param DOCUMENT_ROOT $document_root;
|
||||
fastcgi_param SERVER_PROTOCOL $server_protocol;
|
||||
fastcgi_param REQUEST_SCHEME $scheme;
|
||||
fastcgi_param HTTPS $https if_not_empty;
|
||||
|
||||
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
|
||||
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
|
||||
|
||||
fastcgi_param REMOTE_ADDR $remote_addr;
|
||||
fastcgi_param REMOTE_PORT $remote_port;
|
||||
fastcgi_param SERVER_ADDR $server_addr;
|
||||
fastcgi_param SERVER_PORT $server_port;
|
||||
fastcgi_param SERVER_NAME $server_name;
|
||||
|
||||
# PHP only, required if PHP was built with --enable-force-cgi-redirect
|
||||
fastcgi_param REDIRECT_STATUS 200;
|
||||
109
nginx/conf/koi-utf
Normal file
109
nginx/conf/koi-utf
Normal file
@@ -0,0 +1,109 @@
|
||||
|
||||
# This map is not a full koi8-r <> utf8 map: it does not contain
|
||||
# box-drawing and some other characters. Besides this map contains
|
||||
# several koi8-u and Byelorussian letters which are not in koi8-r.
|
||||
# If you need a full and standard map, use contrib/unicode2nginx/koi-utf
|
||||
# map instead.
|
||||
|
||||
charset_map koi8-r utf-8 {
|
||||
|
||||
80 E282AC ; # euro
|
||||
|
||||
95 E280A2 ; # bullet
|
||||
|
||||
9A C2A0 ; #
|
||||
|
||||
9E C2B7 ; # ·
|
||||
|
||||
A3 D191 ; # small yo
|
||||
A4 D194 ; # small Ukrainian ye
|
||||
|
||||
A6 D196 ; # small Ukrainian i
|
||||
A7 D197 ; # small Ukrainian yi
|
||||
|
||||
AD D291 ; # small Ukrainian soft g
|
||||
AE D19E ; # small Byelorussian short u
|
||||
|
||||
B0 C2B0 ; # °
|
||||
|
||||
B3 D081 ; # capital YO
|
||||
B4 D084 ; # capital Ukrainian YE
|
||||
|
||||
B6 D086 ; # capital Ukrainian I
|
||||
B7 D087 ; # capital Ukrainian YI
|
||||
|
||||
B9 E28496 ; # numero sign
|
||||
|
||||
BD D290 ; # capital Ukrainian soft G
|
||||
BE D18E ; # capital Byelorussian short U
|
||||
|
||||
BF C2A9 ; # (C)
|
||||
|
||||
C0 D18E ; # small yu
|
||||
C1 D0B0 ; # small a
|
||||
C2 D0B1 ; # small b
|
||||
C3 D186 ; # small ts
|
||||
C4 D0B4 ; # small d
|
||||
C5 D0B5 ; # small ye
|
||||
C6 D184 ; # small f
|
||||
C7 D0B3 ; # small g
|
||||
C8 D185 ; # small kh
|
||||
C9 D0B8 ; # small i
|
||||
CA D0B9 ; # small j
|
||||
CB D0BA ; # small k
|
||||
CC D0BB ; # small l
|
||||
CD D0BC ; # small m
|
||||
CE D0BD ; # small n
|
||||
CF D0BE ; # small o
|
||||
|
||||
D0 D0BF ; # small p
|
||||
D1 D18F ; # small ya
|
||||
D2 D180 ; # small r
|
||||
D3 D181 ; # small s
|
||||
D4 D182 ; # small t
|
||||
D5 D183 ; # small u
|
||||
D6 D0B6 ; # small zh
|
||||
D7 D0B2 ; # small v
|
||||
D8 D18C ; # small soft sign
|
||||
D9 D18B ; # small y
|
||||
DA D0B7 ; # small z
|
||||
DB D188 ; # small sh
|
||||
DC D18D ; # small e
|
||||
DD D189 ; # small shch
|
||||
DE D187 ; # small ch
|
||||
DF D18A ; # small hard sign
|
||||
|
||||
E0 D0AE ; # capital YU
|
||||
E1 D090 ; # capital A
|
||||
E2 D091 ; # capital B
|
||||
E3 D0A6 ; # capital TS
|
||||
E4 D094 ; # capital D
|
||||
E5 D095 ; # capital YE
|
||||
E6 D0A4 ; # capital F
|
||||
E7 D093 ; # capital G
|
||||
E8 D0A5 ; # capital KH
|
||||
E9 D098 ; # capital I
|
||||
EA D099 ; # capital J
|
||||
EB D09A ; # capital K
|
||||
EC D09B ; # capital L
|
||||
ED D09C ; # capital M
|
||||
EE D09D ; # capital N
|
||||
EF D09E ; # capital O
|
||||
|
||||
F0 D09F ; # capital P
|
||||
F1 D0AF ; # capital YA
|
||||
F2 D0A0 ; # capital R
|
||||
F3 D0A1 ; # capital S
|
||||
F4 D0A2 ; # capital T
|
||||
F5 D0A3 ; # capital U
|
||||
F6 D096 ; # capital ZH
|
||||
F7 D092 ; # capital V
|
||||
F8 D0AC ; # capital soft sign
|
||||
F9 D0AB ; # capital Y
|
||||
FA D097 ; # capital Z
|
||||
FB D0A8 ; # capital SH
|
||||
FC D0AD ; # capital E
|
||||
FD D0A9 ; # capital SHCH
|
||||
FE D0A7 ; # capital CH
|
||||
FF D0AA ; # capital hard sign
|
||||
}
|
||||
103
nginx/conf/koi-win
Normal file
103
nginx/conf/koi-win
Normal file
@@ -0,0 +1,103 @@
|
||||
|
||||
charset_map koi8-r windows-1251 {
|
||||
|
||||
80 88 ; # euro
|
||||
|
||||
95 95 ; # bullet
|
||||
|
||||
9A A0 ; #
|
||||
|
||||
9E B7 ; # ·
|
||||
|
||||
A3 B8 ; # small yo
|
||||
A4 BA ; # small Ukrainian ye
|
||||
|
||||
A6 B3 ; # small Ukrainian i
|
||||
A7 BF ; # small Ukrainian yi
|
||||
|
||||
AD B4 ; # small Ukrainian soft g
|
||||
AE A2 ; # small Byelorussian short u
|
||||
|
||||
B0 B0 ; # °
|
||||
|
||||
B3 A8 ; # capital YO
|
||||
B4 AA ; # capital Ukrainian YE
|
||||
|
||||
B6 B2 ; # capital Ukrainian I
|
||||
B7 AF ; # capital Ukrainian YI
|
||||
|
||||
B9 B9 ; # numero sign
|
||||
|
||||
BD A5 ; # capital Ukrainian soft G
|
||||
BE A1 ; # capital Byelorussian short U
|
||||
|
||||
BF A9 ; # (C)
|
||||
|
||||
C0 FE ; # small yu
|
||||
C1 E0 ; # small a
|
||||
C2 E1 ; # small b
|
||||
C3 F6 ; # small ts
|
||||
C4 E4 ; # small d
|
||||
C5 E5 ; # small ye
|
||||
C6 F4 ; # small f
|
||||
C7 E3 ; # small g
|
||||
C8 F5 ; # small kh
|
||||
C9 E8 ; # small i
|
||||
CA E9 ; # small j
|
||||
CB EA ; # small k
|
||||
CC EB ; # small l
|
||||
CD EC ; # small m
|
||||
CE ED ; # small n
|
||||
CF EE ; # small o
|
||||
|
||||
D0 EF ; # small p
|
||||
D1 FF ; # small ya
|
||||
D2 F0 ; # small r
|
||||
D3 F1 ; # small s
|
||||
D4 F2 ; # small t
|
||||
D5 F3 ; # small u
|
||||
D6 E6 ; # small zh
|
||||
D7 E2 ; # small v
|
||||
D8 FC ; # small soft sign
|
||||
D9 FB ; # small y
|
||||
DA E7 ; # small z
|
||||
DB F8 ; # small sh
|
||||
DC FD ; # small e
|
||||
DD F9 ; # small shch
|
||||
DE F7 ; # small ch
|
||||
DF FA ; # small hard sign
|
||||
|
||||
E0 DE ; # capital YU
|
||||
E1 C0 ; # capital A
|
||||
E2 C1 ; # capital B
|
||||
E3 D6 ; # capital TS
|
||||
E4 C4 ; # capital D
|
||||
E5 C5 ; # capital YE
|
||||
E6 D4 ; # capital F
|
||||
E7 C3 ; # capital G
|
||||
E8 D5 ; # capital KH
|
||||
E9 C8 ; # capital I
|
||||
EA C9 ; # capital J
|
||||
EB CA ; # capital K
|
||||
EC CB ; # capital L
|
||||
ED CC ; # capital M
|
||||
EE CD ; # capital N
|
||||
EF CE ; # capital O
|
||||
|
||||
F0 CF ; # capital P
|
||||
F1 DF ; # capital YA
|
||||
F2 D0 ; # capital R
|
||||
F3 D1 ; # capital S
|
||||
F4 D2 ; # capital T
|
||||
F5 D3 ; # capital U
|
||||
F6 C6 ; # capital ZH
|
||||
F7 C2 ; # capital V
|
||||
F8 DC ; # capital soft sign
|
||||
F9 DB ; # capital Y
|
||||
FA C7 ; # capital Z
|
||||
FB D8 ; # capital SH
|
||||
FC DD ; # capital E
|
||||
FD D9 ; # capital SHCH
|
||||
FE D7 ; # capital CH
|
||||
FF DA ; # capital hard sign
|
||||
}
|
||||
97
nginx/conf/mime.types
Normal file
97
nginx/conf/mime.types
Normal file
@@ -0,0 +1,97 @@
|
||||
|
||||
types {
|
||||
text/html html htm shtml;
|
||||
text/css css;
|
||||
text/xml xml;
|
||||
image/gif gif;
|
||||
image/jpeg jpeg jpg;
|
||||
application/javascript js;
|
||||
application/atom+xml atom;
|
||||
application/rss+xml rss;
|
||||
|
||||
text/mathml mml;
|
||||
text/plain txt;
|
||||
text/vnd.sun.j2me.app-descriptor jad;
|
||||
text/vnd.wap.wml wml;
|
||||
text/x-component htc;
|
||||
|
||||
image/png png;
|
||||
image/svg+xml svg svgz;
|
||||
image/tiff tif tiff;
|
||||
image/vnd.wap.wbmp wbmp;
|
||||
image/webp webp;
|
||||
image/x-icon ico;
|
||||
image/x-jng jng;
|
||||
image/x-ms-bmp bmp;
|
||||
|
||||
font/woff woff;
|
||||
font/woff2 woff2;
|
||||
|
||||
application/java-archive jar war ear;
|
||||
application/json json;
|
||||
application/mac-binhex40 hqx;
|
||||
application/msword doc;
|
||||
application/pdf pdf;
|
||||
application/postscript ps eps ai;
|
||||
application/rtf rtf;
|
||||
application/vnd.apple.mpegurl m3u8;
|
||||
application/vnd.google-earth.kml+xml kml;
|
||||
application/vnd.google-earth.kmz kmz;
|
||||
application/vnd.ms-excel xls;
|
||||
application/vnd.ms-fontobject eot;
|
||||
application/vnd.ms-powerpoint ppt;
|
||||
application/vnd.oasis.opendocument.graphics odg;
|
||||
application/vnd.oasis.opendocument.presentation odp;
|
||||
application/vnd.oasis.opendocument.spreadsheet ods;
|
||||
application/vnd.oasis.opendocument.text odt;
|
||||
application/vnd.openxmlformats-officedocument.presentationml.presentation
|
||||
pptx;
|
||||
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
||||
xlsx;
|
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document
|
||||
docx;
|
||||
application/vnd.wap.wmlc wmlc;
|
||||
application/x-7z-compressed 7z;
|
||||
application/x-cocoa cco;
|
||||
application/x-java-archive-diff jardiff;
|
||||
application/x-java-jnlp-file jnlp;
|
||||
application/x-makeself run;
|
||||
application/x-perl pl pm;
|
||||
application/x-pilot prc pdb;
|
||||
application/x-rar-compressed rar;
|
||||
application/x-redhat-package-manager rpm;
|
||||
application/x-sea sea;
|
||||
application/x-shockwave-flash swf;
|
||||
application/x-stuffit sit;
|
||||
application/x-tcl tcl tk;
|
||||
application/x-x509-ca-cert der pem crt;
|
||||
application/x-xpinstall xpi;
|
||||
application/xhtml+xml xhtml;
|
||||
application/xspf+xml xspf;
|
||||
application/zip zip;
|
||||
|
||||
application/octet-stream bin exe dll;
|
||||
application/octet-stream deb;
|
||||
application/octet-stream dmg;
|
||||
application/octet-stream iso img;
|
||||
application/octet-stream msi msp msm;
|
||||
|
||||
audio/midi mid midi kar;
|
||||
audio/mpeg mp3;
|
||||
audio/ogg ogg;
|
||||
audio/x-m4a m4a;
|
||||
audio/x-realaudio ra;
|
||||
|
||||
video/3gpp 3gpp 3gp;
|
||||
video/mp2t ts;
|
||||
video/mp4 mp4;
|
||||
video/mpeg mpeg mpg;
|
||||
video/quicktime mov;
|
||||
video/webm webm;
|
||||
video/x-flv flv;
|
||||
video/x-m4v m4v;
|
||||
video/x-mng mng;
|
||||
video/x-ms-asf asx asf;
|
||||
video/x-ms-wmv wmv;
|
||||
video/x-msvideo avi;
|
||||
}
|
||||
72
nginx/conf/nginx.conf
Normal file
72
nginx/conf/nginx.conf
Normal file
@@ -0,0 +1,72 @@
|
||||
worker_processes auto; ## Default: 1
|
||||
worker_rlimit_nofile 8192;
|
||||
|
||||
events {
|
||||
worker_connections 1024; ## Default: 1024
|
||||
}
|
||||
|
||||
http {
|
||||
sendfile on;
|
||||
tcp_nopush on;
|
||||
log_not_found off;
|
||||
gzip on;
|
||||
include mime.types; # web pages might not be rendered properly if mime.types not included
|
||||
default_type application/octet-stream;
|
||||
client_max_body_size 500M;
|
||||
keepalive_timeout 30s;
|
||||
|
||||
upstream backend {
|
||||
server localhost:9001;
|
||||
}
|
||||
|
||||
# the Connection header will be correctly set to close when the Upgrade header in the request is set to ''.
|
||||
map $http_upgrade $connection_upgrade {
|
||||
default upgrade;
|
||||
'' close;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 9000;
|
||||
|
||||
# This is the default block since / matches all requests.
|
||||
# It should be used to serve static files.
|
||||
location / {
|
||||
# Search ./resources/xxx first;
|
||||
# if not found, search ./resources/index.html instead;
|
||||
# if still not found, respond 404.
|
||||
root ./resources;
|
||||
try_files $uri /index.html =404;
|
||||
}
|
||||
|
||||
# Both the trailing slashes in location and proxy_pass matter
|
||||
# because if the proxy_pass directive is specified with a URI,
|
||||
# then when a request is passed to the server,
|
||||
# the part of a normalized request URI matching the location is replaced by a URI specified in the directive
|
||||
location /api/ {
|
||||
# /api/** will be forwarded to http://backend/**
|
||||
proxy_pass http://backend/;
|
||||
# For NGINX to send the Upgrade request from the client to the backend server,
|
||||
# the Upgrade and Connection headers must be set explicitly
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection $connection_upgrade;
|
||||
}
|
||||
|
||||
location = /allocation/assignment { # This is an exact match.
|
||||
# /allocation/assignment will be forwarded to http://backend/allocation/assignment
|
||||
proxy_pass http://backend;
|
||||
}
|
||||
|
||||
location /get/ {
|
||||
# /get/** will be forwarded to http://backend/get/**
|
||||
proxy_pass http://backend;
|
||||
}
|
||||
|
||||
location = /export/taskTableDataExport {
|
||||
proxy_pass http://backend;
|
||||
}
|
||||
|
||||
location = /task/createTaskByXmlFile {
|
||||
proxy_pass http://backend;
|
||||
}
|
||||
}
|
||||
}
|
||||
17
nginx/conf/scgi_params
Normal file
17
nginx/conf/scgi_params
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
scgi_param REQUEST_METHOD $request_method;
|
||||
scgi_param REQUEST_URI $request_uri;
|
||||
scgi_param QUERY_STRING $query_string;
|
||||
scgi_param CONTENT_TYPE $content_type;
|
||||
|
||||
scgi_param DOCUMENT_URI $document_uri;
|
||||
scgi_param DOCUMENT_ROOT $document_root;
|
||||
scgi_param SCGI 1;
|
||||
scgi_param SERVER_PROTOCOL $server_protocol;
|
||||
scgi_param REQUEST_SCHEME $scheme;
|
||||
scgi_param HTTPS $https if_not_empty;
|
||||
|
||||
scgi_param REMOTE_ADDR $remote_addr;
|
||||
scgi_param REMOTE_PORT $remote_port;
|
||||
scgi_param SERVER_PORT $server_port;
|
||||
scgi_param SERVER_NAME $server_name;
|
||||
17
nginx/conf/uwsgi_params
Normal file
17
nginx/conf/uwsgi_params
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
uwsgi_param QUERY_STRING $query_string;
|
||||
uwsgi_param REQUEST_METHOD $request_method;
|
||||
uwsgi_param CONTENT_TYPE $content_type;
|
||||
uwsgi_param CONTENT_LENGTH $content_length;
|
||||
|
||||
uwsgi_param REQUEST_URI $request_uri;
|
||||
uwsgi_param PATH_INFO $document_uri;
|
||||
uwsgi_param DOCUMENT_ROOT $document_root;
|
||||
uwsgi_param SERVER_PROTOCOL $server_protocol;
|
||||
uwsgi_param REQUEST_SCHEME $scheme;
|
||||
uwsgi_param HTTPS $https if_not_empty;
|
||||
|
||||
uwsgi_param REMOTE_ADDR $remote_addr;
|
||||
uwsgi_param REMOTE_PORT $remote_port;
|
||||
uwsgi_param SERVER_PORT $server_port;
|
||||
uwsgi_param SERVER_NAME $server_name;
|
||||
126
nginx/conf/win-utf
Normal file
126
nginx/conf/win-utf
Normal file
@@ -0,0 +1,126 @@
|
||||
|
||||
# This map is not a full windows-1251 <> utf8 map: it does not
|
||||
# contain Serbian and Macedonian letters. If you need a full map,
|
||||
# use contrib/unicode2nginx/win-utf map instead.
|
||||
|
||||
charset_map windows-1251 utf-8 {
|
||||
|
||||
82 E2809A ; # single low-9 quotation mark
|
||||
|
||||
84 E2809E ; # double low-9 quotation mark
|
||||
85 E280A6 ; # ellipsis
|
||||
86 E280A0 ; # dagger
|
||||
87 E280A1 ; # double dagger
|
||||
88 E282AC ; # euro
|
||||
89 E280B0 ; # per mille
|
||||
|
||||
91 E28098 ; # left single quotation mark
|
||||
92 E28099 ; # right single quotation mark
|
||||
93 E2809C ; # left double quotation mark
|
||||
94 E2809D ; # right double quotation mark
|
||||
95 E280A2 ; # bullet
|
||||
96 E28093 ; # en dash
|
||||
97 E28094 ; # em dash
|
||||
|
||||
99 E284A2 ; # trade mark sign
|
||||
|
||||
A0 C2A0 ; #
|
||||
A1 D18E ; # capital Byelorussian short U
|
||||
A2 D19E ; # small Byelorussian short u
|
||||
|
||||
A4 C2A4 ; # currency sign
|
||||
A5 D290 ; # capital Ukrainian soft G
|
||||
A6 C2A6 ; # borken bar
|
||||
A7 C2A7 ; # section sign
|
||||
A8 D081 ; # capital YO
|
||||
A9 C2A9 ; # (C)
|
||||
AA D084 ; # capital Ukrainian YE
|
||||
AB C2AB ; # left-pointing double angle quotation mark
|
||||
AC C2AC ; # not sign
|
||||
AD C2AD ; # soft hypen
|
||||
AE C2AE ; # (R)
|
||||
AF D087 ; # capital Ukrainian YI
|
||||
|
||||
B0 C2B0 ; # °
|
||||
B1 C2B1 ; # plus-minus sign
|
||||
B2 D086 ; # capital Ukrainian I
|
||||
B3 D196 ; # small Ukrainian i
|
||||
B4 D291 ; # small Ukrainian soft g
|
||||
B5 C2B5 ; # micro sign
|
||||
B6 C2B6 ; # pilcrow sign
|
||||
B7 C2B7 ; # ·
|
||||
B8 D191 ; # small yo
|
||||
B9 E28496 ; # numero sign
|
||||
BA D194 ; # small Ukrainian ye
|
||||
BB C2BB ; # right-pointing double angle quotation mark
|
||||
|
||||
BF D197 ; # small Ukrainian yi
|
||||
|
||||
C0 D090 ; # capital A
|
||||
C1 D091 ; # capital B
|
||||
C2 D092 ; # capital V
|
||||
C3 D093 ; # capital G
|
||||
C4 D094 ; # capital D
|
||||
C5 D095 ; # capital YE
|
||||
C6 D096 ; # capital ZH
|
||||
C7 D097 ; # capital Z
|
||||
C8 D098 ; # capital I
|
||||
C9 D099 ; # capital J
|
||||
CA D09A ; # capital K
|
||||
CB D09B ; # capital L
|
||||
CC D09C ; # capital M
|
||||
CD D09D ; # capital N
|
||||
CE D09E ; # capital O
|
||||
CF D09F ; # capital P
|
||||
|
||||
D0 D0A0 ; # capital R
|
||||
D1 D0A1 ; # capital S
|
||||
D2 D0A2 ; # capital T
|
||||
D3 D0A3 ; # capital U
|
||||
D4 D0A4 ; # capital F
|
||||
D5 D0A5 ; # capital KH
|
||||
D6 D0A6 ; # capital TS
|
||||
D7 D0A7 ; # capital CH
|
||||
D8 D0A8 ; # capital SH
|
||||
D9 D0A9 ; # capital SHCH
|
||||
DA D0AA ; # capital hard sign
|
||||
DB D0AB ; # capital Y
|
||||
DC D0AC ; # capital soft sign
|
||||
DD D0AD ; # capital E
|
||||
DE D0AE ; # capital YU
|
||||
DF D0AF ; # capital YA
|
||||
|
||||
E0 D0B0 ; # small a
|
||||
E1 D0B1 ; # small b
|
||||
E2 D0B2 ; # small v
|
||||
E3 D0B3 ; # small g
|
||||
E4 D0B4 ; # small d
|
||||
E5 D0B5 ; # small ye
|
||||
E6 D0B6 ; # small zh
|
||||
E7 D0B7 ; # small z
|
||||
E8 D0B8 ; # small i
|
||||
E9 D0B9 ; # small j
|
||||
EA D0BA ; # small k
|
||||
EB D0BB ; # small l
|
||||
EC D0BC ; # small m
|
||||
ED D0BD ; # small n
|
||||
EE D0BE ; # small o
|
||||
EF D0BF ; # small p
|
||||
|
||||
F0 D180 ; # small r
|
||||
F1 D181 ; # small s
|
||||
F2 D182 ; # small t
|
||||
F3 D183 ; # small u
|
||||
F4 D184 ; # small f
|
||||
F5 D185 ; # small kh
|
||||
F6 D186 ; # small ts
|
||||
F7 D187 ; # small ch
|
||||
F8 D188 ; # small sh
|
||||
F9 D189 ; # small shch
|
||||
FA D18A ; # small hard sign
|
||||
FB D18B ; # small y
|
||||
FC D18C ; # small soft sign
|
||||
FD D18D ; # small e
|
||||
FE D18E ; # small yu
|
||||
FF D18F ; # small ya
|
||||
}
|
||||
314
pom.xml
Normal file
314
pom.xml
Normal file
@@ -0,0 +1,314 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>2.3.0.RELEASE</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
<groupId>cn.edu.whu</groupId>
|
||||
<artifactId>boot</artifactId>
|
||||
<version>3.0</version>
|
||||
<name>Android</name>
|
||||
<!--打包放开-->
|
||||
<!--<packaging>war</packaging>-->
|
||||
<packaging>jar</packaging>
|
||||
<description>Demo project for Spring Boot</description>
|
||||
|
||||
<properties>
|
||||
<java.version>1.8</java.version>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
<!-- <geotools.version>20.3</geotools.version>-->
|
||||
<geotools.version>25.2</geotools.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
<!--打包放开-->
|
||||
<!--去除内嵌tomcat-->
|
||||
<!--<exclusions>-->
|
||||
<!--<exclusion>-->
|
||||
<!--<groupId>org.springframework.boot</groupId>-->
|
||||
<!--<artifactId>spring-boot-starter-tomcat</artifactId>-->
|
||||
<!--</exclusion>-->
|
||||
<!--</exclusions>-->
|
||||
</dependency>
|
||||
|
||||
<!--这里指定打war包的时不再需要tomcat相关的包,但是本地运行时必须注释掉,否则会报错-->
|
||||
<!--<dependency>-->
|
||||
<!--<groupId>org.springframework.boot</groupId>-->
|
||||
<!--<artifactId>spring-boot-starter-tomcat</artifactId>-->
|
||||
<!--<version>1.3.5.RELEASE</version>-->
|
||||
<!--<scope>provided</scope>-->
|
||||
<!--</dependency>-->
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-aop</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-redis</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>jakarta.validation</groupId>
|
||||
<artifactId>jakarta.validation-api</artifactId>
|
||||
</dependency>
|
||||
|
||||
|
||||
<!--Hutool Java工具包-->
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
<version>4.5.7</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>fastjson</artifactId>
|
||||
<version>1.2.44</version>
|
||||
</dependency>
|
||||
|
||||
<!-- JDOM 和 dom4j 写 XML文件依赖 -->
|
||||
<dependency>
|
||||
<groupId>org.jdom</groupId>
|
||||
<artifactId>jdom</artifactId>
|
||||
<version>1.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dom4j</groupId>
|
||||
<artifactId>dom4j</artifactId>
|
||||
<version>2.1.1</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 本次数据库使用 porstgre数据库 和 MyBatis访问数据库 -->
|
||||
<dependency>
|
||||
<groupId>org.postgresql</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.mybatis.spring.boot</groupId>
|
||||
<artifactId>mybatis-spring-boot-starter</artifactId>
|
||||
<version>1.3.1</version>
|
||||
</dependency>
|
||||
|
||||
<!-- PageHelper分页查询-->
|
||||
<dependency>
|
||||
<groupId>com.github.pagehelper</groupId>
|
||||
<artifactId>pagehelper-spring-boot-starter</artifactId>
|
||||
<version>1.2.3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
<version>1.9</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
<version>3.8.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<version>2.6</version>
|
||||
</dependency>
|
||||
|
||||
<!--文件夹压缩与解压-->
|
||||
<dependency>
|
||||
<groupId>net.lingala.zip4j</groupId>
|
||||
<artifactId>zip4j</artifactId>
|
||||
<version>1.3.2</version>
|
||||
</dependency>
|
||||
|
||||
<!-- session -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.session</groupId>
|
||||
<artifactId>spring-session-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.session</groupId>
|
||||
<artifactId>spring-session-jdbc</artifactId>
|
||||
</dependency>
|
||||
<!-- Shiro -->
|
||||
<dependency>
|
||||
<groupId>org.apache.shiro</groupId>
|
||||
<artifactId>shiro-spring-boot-web-starter</artifactId>
|
||||
<version>1.4.0</version>
|
||||
</dependency>
|
||||
<!-- Gson -->
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<version>2.8.5</version>
|
||||
</dependency>
|
||||
<!-- Mail -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-mail</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- ESRI geometry -->
|
||||
<!-- For reading Shapefile -->
|
||||
<dependency>
|
||||
<groupId>com.esri.geometry</groupId>
|
||||
<artifactId>esri-geometry-api</artifactId>
|
||||
<version>2.2.2</version>
|
||||
</dependency>
|
||||
|
||||
<!-- For geometry operations -->
|
||||
<dependency>
|
||||
<groupId>org.locationtech.jts</groupId>
|
||||
<artifactId>jts-core</artifactId>
|
||||
<version>1.18.2</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-math3</artifactId>
|
||||
<version>3.6.1</version>
|
||||
</dependency>
|
||||
|
||||
<!-- GeoJSON -->
|
||||
<dependency>
|
||||
<groupId>de.grundid.opendatalab</groupId>
|
||||
<artifactId>geojson-jackson</artifactId>
|
||||
<version>1.8.1</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 导入配置文件处理器,配置文件进行绑定时就会有提示 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-configuration-processor</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-websocket</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-cache</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!--读写Excel文件-->
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-ooxml</artifactId>
|
||||
<version>4.1.0</version>
|
||||
</dependency>
|
||||
|
||||
<!--GeoTools读写shp相关依赖-->
|
||||
<dependency>
|
||||
<groupId>org.geotools</groupId>
|
||||
<artifactId>gt-shapefile</artifactId>
|
||||
<version>${geotools.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.geotools</groupId>
|
||||
<artifactId>gt-opengis</artifactId>
|
||||
<version>${geotools.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.geotools</groupId>
|
||||
<artifactId>gt-main</artifactId>
|
||||
<version>${geotools.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.geotools</groupId>
|
||||
<artifactId>gt-epsg-hsql</artifactId>
|
||||
<version>${geotools.version}</version>
|
||||
</dependency>
|
||||
<!-- https://mvnrepository.com/artifact/org.geotools/gt-geojson -->
|
||||
<dependency>
|
||||
<groupId>org.geotools</groupId>
|
||||
<artifactId>gt-geojson</artifactId>
|
||||
<version>${geotools.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.gdal</groupId>
|
||||
<artifactId>gdal</artifactId>
|
||||
<version>3.10.3</version>
|
||||
</dependency>
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>com.vividsolutions</groupId>-->
|
||||
<!-- <artifactId>jts</artifactId>-->
|
||||
<!-- <version>1.13</version>-->
|
||||
<!-- </dependency>-->
|
||||
|
||||
<dependency>
|
||||
<groupId>com.opencsv</groupId>
|
||||
<artifactId>opencsv</artifactId>
|
||||
<version>4.6</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.jooq</groupId>
|
||||
<artifactId>jooq</artifactId>
|
||||
<version>3.14.15</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<!--上面gt-geojson添加依赖遇到not fount,可手动配置maven repository解决 -->
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>osgeo</id>
|
||||
<name>OSGeo Release Repository</name>
|
||||
<url>https://repo.osgeo.org/repository/release/</url>
|
||||
<snapshots><enabled>false</enabled></snapshots>
|
||||
<releases><enabled>true</enabled></releases>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>osgeo-snapshot</id>
|
||||
<name>OSGeo Snapshot Repository</name>
|
||||
<url>https://repo.osgeo.org/repository/snapshot/</url>
|
||||
<snapshots><enabled>true</enabled></snapshots>
|
||||
<releases><enabled>false</enabled></releases>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
|
||||
<!--避免编译war出现test的错误-->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<skip>true</skip>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
10
postgres/Dockerfile
Normal file
10
postgres/Dockerfile
Normal file
@@ -0,0 +1,10 @@
|
||||
FROM postgres:12
|
||||
|
||||
# install PostGIS extension
|
||||
RUN apt-get update && apt install -y postgis postgresql-12-postgis-3
|
||||
|
||||
RUN mkdir -p /docker-entrypoint-initdb.d
|
||||
|
||||
# create app database and restore data
|
||||
COPY ./schema.sql /docker-entrypoint-initdb.d/schema.sql
|
||||
COPY ./tables.sql /docker-entrypoint-initdb.d/tables.sql
|
||||
954
postgres/schema.sql
Normal file
954
postgres/schema.sql
Normal file
@@ -0,0 +1,954 @@
|
||||
--
|
||||
-- PostgreSQL database dump
|
||||
--
|
||||
|
||||
-- Dumped from database version 10.9
|
||||
-- Dumped by pg_dump version 12.5
|
||||
|
||||
\c tj_project
|
||||
|
||||
SET statement_timeout = 0;
|
||||
SET lock_timeout = 0;
|
||||
SET idle_in_transaction_session_timeout = 0;
|
||||
SET client_encoding = 'UTF8';
|
||||
SET standard_conforming_strings = on;
|
||||
SELECT pg_catalog.set_config('search_path', '', false);
|
||||
SET check_function_bodies = false;
|
||||
SET xmloption = content;
|
||||
SET client_min_messages = warning;
|
||||
SET row_security = off;
|
||||
|
||||
SET default_tablespace = '';
|
||||
|
||||
CREATE EXTENSION IF NOT EXISTS postgis WITH SCHEMA public;
|
||||
|
||||
|
||||
--
|
||||
-- Name: EXTENSION postgis; Type: COMMENT; Schema: -; Owner:
|
||||
--
|
||||
|
||||
COMMENT ON EXTENSION postgis IS 'PostGIS geometry, geography, and raster spatial types and functions';
|
||||
|
||||
|
||||
--
|
||||
-- Name: trigger_set_timestamp(); Type: FUNCTION; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE FUNCTION public.trigger_set_timestamp() RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $$ BEGIN
|
||||
NEW.update_time = NOW();
|
||||
RETURN NEW;
|
||||
|
||||
END;$$;
|
||||
|
||||
|
||||
ALTER FUNCTION public.trigger_set_timestamp() OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: apkversion; Type: TABLE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE TABLE public.apkversion (
|
||||
versionid numeric(2,1),
|
||||
version_code character varying(100),
|
||||
apkpath character varying(100),
|
||||
description text
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.apkversion OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: task; Type: TABLE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE TABLE public.task (
|
||||
id integer NOT NULL,
|
||||
task_name character varying(255),
|
||||
operator character varying(255),
|
||||
create_time timestamp(6) without time zone,
|
||||
modify_time timestamp(6) without time zone,
|
||||
xml_id integer,
|
||||
has_create_tables smallint,
|
||||
config text,
|
||||
database_name character varying(255),
|
||||
introduction character varying(255),
|
||||
upload_deadline character varying(10),
|
||||
create_tables_md5code character varying(255),
|
||||
is_allocation_optional smallint DEFAULT 0,
|
||||
is_reviewer_restricted smallint DEFAULT 1
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.task OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: COLUMN task.is_allocation_optional; Type: COMMENT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COMMENT ON COLUMN public.task.is_allocation_optional IS '0 表示该任务必须分配,1 表示无需分配';
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_cell; Type: TABLE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE TABLE public.task_cell (
|
||||
id integer NOT NULL,
|
||||
task_id integer NOT NULL,
|
||||
geohash character varying(20) NOT NULL,
|
||||
geojson text NOT NULL
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.task_cell OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: task_cell_data; Type: TABLE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE TABLE public.task_cell_data (
|
||||
id integer NOT NULL,
|
||||
task_id integer NOT NULL,
|
||||
table_name character varying(255) NOT NULL,
|
||||
data_id integer NOT NULL,
|
||||
cell_geohash character varying(255) NOT NULL
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.task_cell_data OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: TABLE task_cell_data; Type: COMMENT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COMMENT ON TABLE public.task_cell_data IS '网格和数据的对应关系';
|
||||
|
||||
|
||||
--
|
||||
-- Name: COLUMN task_cell_data.table_name; Type: COMMENT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COMMENT ON COLUMN public.task_cell_data.table_name IS '数据所在的表';
|
||||
|
||||
|
||||
--
|
||||
-- Name: COLUMN task_cell_data.cell_geohash; Type: COMMENT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COMMENT ON COLUMN public.task_cell_data.cell_geohash IS '网格的 Geohash,作为网格的标识';
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_cell_data_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.task_cell_data_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
ALTER TABLE public.task_cell_data_id_seq OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: task_cell_data_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER SEQUENCE public.task_cell_data_id_seq OWNED BY public.task_cell_data.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_cell_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.task_cell_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
ALTER TABLE public.task_cell_id_seq OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: task_cell_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER SEQUENCE public.task_cell_id_seq OWNED BY public.task_cell.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.task_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
MAXVALUE 2147483647
|
||||
CACHE 1;
|
||||
|
||||
|
||||
ALTER TABLE public.task_id_seq OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: task_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER SEQUENCE public.task_id_seq OWNED BY public.task.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_image; Type: TABLE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE TABLE public.task_image (
|
||||
id integer NOT NULL,
|
||||
file_name character varying(255) NOT NULL,
|
||||
bbox public.geometry NOT NULL,
|
||||
task_id integer NOT NULL
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.task_image OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: TABLE task_image; Type: COMMENT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COMMENT ON TABLE public.task_image IS '加密影像';
|
||||
|
||||
|
||||
--
|
||||
-- Name: COLUMN task_image.file_name; Type: COMMENT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COMMENT ON COLUMN public.task_image.file_name IS 'tpkx 文件的名称';
|
||||
|
||||
|
||||
--
|
||||
-- Name: COLUMN task_image.bbox; Type: COMMENT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COMMENT ON COLUMN public.task_image.bbox IS '外接矩形';
|
||||
|
||||
|
||||
--
|
||||
-- Name: COLUMN task_image.task_id; Type: COMMENT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COMMENT ON COLUMN public.task_image.task_id IS '任务ID';
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_image_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.task_image_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
ALTER TABLE public.task_image_id_seq OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: task_image_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER SEQUENCE public.task_image_id_seq OWNED BY public.task_image.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_select_id; Type: TABLE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE TABLE public.task_select_id (
|
||||
id bigint NOT NULL,
|
||||
select_order smallint NOT NULL,
|
||||
select_id text NOT NULL,
|
||||
src_task_id integer NOT NULL,
|
||||
src_table_name character varying(50) NOT NULL,
|
||||
dest_task_id integer NOT NULL,
|
||||
dest_table_name character varying(50) NOT NULL
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.task_select_id OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: COLUMN task_select_id.select_order; Type: COMMENT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COMMENT ON COLUMN public.task_select_id.select_order IS '抽取顺序';
|
||||
|
||||
|
||||
--
|
||||
-- Name: COLUMN task_select_id.select_id; Type: COMMENT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COMMENT ON COLUMN public.task_select_id.select_id IS '抽取的id字符串,用逗号隔开';
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_select_id_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.task_select_id_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
ALTER TABLE public.task_select_id_id_seq OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: task_select_id_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER SEQUENCE public.task_select_id_id_seq OWNED BY public.task_select_id.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_user_cell; Type: TABLE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE TABLE public.task_user_cell (
|
||||
id integer NOT NULL,
|
||||
task_id integer NOT NULL,
|
||||
user_id integer NOT NULL,
|
||||
cell_geohash character varying(255) NOT NULL
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.task_user_cell OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: TABLE task_user_cell; Type: COMMENT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COMMENT ON TABLE public.task_user_cell IS '外业人员和在任务中分配到的网格的对应关系';
|
||||
|
||||
|
||||
--
|
||||
-- Name: COLUMN task_user_cell.cell_geohash; Type: COMMENT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COMMENT ON COLUMN public.task_user_cell.cell_geohash IS '用来标识网格的 Geohash';
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_user_cell_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.task_user_cell_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
ALTER TABLE public.task_user_cell_id_seq OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: task_user_cell_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER SEQUENCE public.task_user_cell_id_seq OWNED BY public.task_user_cell.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_user_role; Type: TABLE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE TABLE public.task_user_role (
|
||||
id integer NOT NULL,
|
||||
task_id integer NOT NULL,
|
||||
user_id integer NOT NULL,
|
||||
work_role smallint DEFAULT 0 NOT NULL
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.task_user_role OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: TABLE task_user_role; Type: COMMENT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COMMENT ON TABLE public.task_user_role IS '某个任务中外业人员的身份(审核人员或采集人员)';
|
||||
|
||||
|
||||
--
|
||||
-- Name: COLUMN task_user_role.work_role; Type: COMMENT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COMMENT ON COLUMN public.task_user_role.work_role IS '1:审核人员 0:采集人员';
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_user_role_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.task_user_role_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
ALTER TABLE public.task_user_role_id_seq OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: task_user_role_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER SEQUENCE public.task_user_role_id_seq OWNED BY public.task_user_role.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: upms_log_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.upms_log_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
ALTER TABLE public.upms_log_id_seq OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: user_permission; Type: TABLE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE TABLE public.user_permission (
|
||||
id integer NOT NULL,
|
||||
description character varying NOT NULL,
|
||||
create_time timestamp without time zone DEFAULT now() NOT NULL,
|
||||
update_time timestamp without time zone DEFAULT now() NOT NULL
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.user_permission OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: TABLE user_permission; Type: COMMENT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COMMENT ON TABLE public.user_permission IS '用户权限';
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_permission_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.user_permission_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
ALTER TABLE public.user_permission_id_seq OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: user_permission_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER SEQUENCE public.user_permission_id_seq OWNED BY public.user_permission.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_role; Type: TABLE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE TABLE public.user_role (
|
||||
id integer NOT NULL,
|
||||
name character varying NOT NULL,
|
||||
create_time timestamp without time zone DEFAULT now() NOT NULL,
|
||||
update_time timestamp without time zone DEFAULT now() NOT NULL,
|
||||
code integer NOT NULL
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.user_role OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: TABLE user_role; Type: COMMENT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COMMENT ON TABLE public.user_role IS '用户角色';
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_role_code; Type: TABLE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE TABLE public.user_role_code (
|
||||
id integer NOT NULL,
|
||||
code integer NOT NULL,
|
||||
role integer NOT NULL
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.user_role_code OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: user_role_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.user_role_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
ALTER TABLE public.user_role_id_seq OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: user_role_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER SEQUENCE public.user_role_id_seq OWNED BY public.user_role.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_role_permission; Type: TABLE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE TABLE public.user_role_permission (
|
||||
id integer NOT NULL,
|
||||
role integer NOT NULL,
|
||||
permission integer NOT NULL,
|
||||
create_time timestamp without time zone DEFAULT now() NOT NULL,
|
||||
update_time timestamp without time zone DEFAULT now() NOT NULL
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.user_role_permission OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: TABLE user_role_permission; Type: COMMENT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COMMENT ON TABLE public.user_role_permission IS '角色-权限对照';
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_role_premission_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.user_role_premission_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
ALTER TABLE public.user_role_premission_id_seq OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: user_role_premission_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER SEQUENCE public.user_role_premission_id_seq OWNED BY public.user_role_permission.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_staff; Type: TABLE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE TABLE public.user_staff (
|
||||
id integer NOT NULL,
|
||||
username character varying NOT NULL,
|
||||
password character varying NOT NULL,
|
||||
salt character varying NOT NULL,
|
||||
phone character varying,
|
||||
email character varying,
|
||||
role integer NOT NULL,
|
||||
create_time timestamp without time zone DEFAULT now() NOT NULL,
|
||||
update_time timestamp without time zone DEFAULT now() NOT NULL,
|
||||
real_name character varying(255) NOT NULL
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.user_staff OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: TABLE user_staff; Type: COMMENT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COMMENT ON TABLE public.user_staff IS '人员信息';
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_staff_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.user_staff_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
ALTER TABLE public.user_staff_id_seq OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: user_staff_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER SEQUENCE public.user_staff_id_seq OWNED BY public.user_staff.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: userinfo_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.userinfo_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1;
|
||||
|
||||
|
||||
ALTER TABLE public.userinfo_id_seq OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: xml; Type: TABLE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE TABLE public.xml (
|
||||
id integer NOT NULL,
|
||||
file_name character varying(255),
|
||||
md5_code character varying(255),
|
||||
file_path text,
|
||||
create_time timestamp(6) without time zone,
|
||||
modify_time timestamp(6) without time zone
|
||||
);
|
||||
|
||||
|
||||
ALTER TABLE public.xml OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: xml_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE SEQUENCE public.xml_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
MAXVALUE 2147483647
|
||||
CACHE 1;
|
||||
|
||||
|
||||
ALTER TABLE public.xml_id_seq OWNER TO postgres;
|
||||
|
||||
--
|
||||
-- Name: xml_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER SEQUENCE public.xml_id_seq OWNED BY public.xml.id;
|
||||
|
||||
|
||||
--
|
||||
-- Name: task id; Type: DEFAULT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.task ALTER COLUMN id SET DEFAULT nextval('public.task_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_cell id; Type: DEFAULT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.task_cell ALTER COLUMN id SET DEFAULT nextval('public.task_cell_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_cell_data id; Type: DEFAULT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.task_cell_data ALTER COLUMN id SET DEFAULT nextval('public.task_cell_data_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_image id; Type: DEFAULT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.task_image ALTER COLUMN id SET DEFAULT nextval('public.task_image_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_select_id id; Type: DEFAULT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.task_select_id ALTER COLUMN id SET DEFAULT nextval('public.task_select_id_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_user_cell id; Type: DEFAULT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.task_user_cell ALTER COLUMN id SET DEFAULT nextval('public.task_user_cell_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_user_role id; Type: DEFAULT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.task_user_role ALTER COLUMN id SET DEFAULT nextval('public.task_user_role_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_permission id; Type: DEFAULT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.user_permission ALTER COLUMN id SET DEFAULT nextval('public.user_permission_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_role id; Type: DEFAULT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.user_role ALTER COLUMN id SET DEFAULT nextval('public.user_role_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_role_permission id; Type: DEFAULT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.user_role_permission ALTER COLUMN id SET DEFAULT nextval('public.user_role_premission_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_staff id; Type: DEFAULT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.user_staff ALTER COLUMN id SET DEFAULT nextval('public.user_staff_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: xml id; Type: DEFAULT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.xml ALTER COLUMN id SET DEFAULT nextval('public.xml_id_seq'::regclass);
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_cell_data task_cell_data_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.task_cell_data
|
||||
ADD CONSTRAINT task_cell_data_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_cell task_cell_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.task_cell
|
||||
ADD CONSTRAINT task_cell_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_image task_image_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.task_image
|
||||
ADD CONSTRAINT task_image_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: task task_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.task
|
||||
ADD CONSTRAINT task_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_select_id task_select_id_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.task_select_id
|
||||
ADD CONSTRAINT task_select_id_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_user_cell task_user_cell_pk; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.task_user_cell
|
||||
ADD CONSTRAINT task_user_cell_pk UNIQUE (task_id, user_id, cell_geohash);
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_user_cell task_user_cell_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.task_user_cell
|
||||
ADD CONSTRAINT task_user_cell_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_user_role task_user_role_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.task_user_role
|
||||
ADD CONSTRAINT task_user_role_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_permission unique_description; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.user_permission
|
||||
ADD CONSTRAINT unique_description UNIQUE (description);
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_staff unique_email; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.user_staff
|
||||
ADD CONSTRAINT unique_email UNIQUE (email);
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_staff unique_phone; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.user_staff
|
||||
ADD CONSTRAINT unique_phone UNIQUE (phone);
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_staff unique_username; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.user_staff
|
||||
ADD CONSTRAINT unique_username UNIQUE (username);
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_permission user_permission_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.user_permission
|
||||
ADD CONSTRAINT user_permission_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_role_code user_role_code_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.user_role_code
|
||||
ADD CONSTRAINT user_role_code_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_role user_role_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.user_role
|
||||
ADD CONSTRAINT user_role_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_role_permission user_role_premission_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.user_role_permission
|
||||
ADD CONSTRAINT user_role_premission_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_staff user_staff_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.user_staff
|
||||
ADD CONSTRAINT user_staff_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: xml xml_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.xml
|
||||
ADD CONSTRAINT xml_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: geom_idx; Type: INDEX; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE INDEX geom_idx ON public.task_image USING gist (bbox);
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_user_role_task_id_user_id_uindex; Type: INDEX; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE UNIQUE INDEX task_user_role_task_id_user_id_uindex ON public.task_user_role USING btree (task_id, user_id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_permission update_timestamp; Type: TRIGGER; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE TRIGGER update_timestamp BEFORE UPDATE ON public.user_permission FOR EACH ROW EXECUTE PROCEDURE public.trigger_set_timestamp();
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_role update_timestamp; Type: TRIGGER; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE TRIGGER update_timestamp BEFORE UPDATE ON public.user_role FOR EACH ROW EXECUTE PROCEDURE public.trigger_set_timestamp();
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_role_permission update_timestamp; Type: TRIGGER; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE TRIGGER update_timestamp BEFORE UPDATE ON public.user_role_permission FOR EACH ROW EXECUTE PROCEDURE public.trigger_set_timestamp();
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_staff update_timestamp; Type: TRIGGER; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
CREATE TRIGGER update_timestamp BEFORE UPDATE ON public.user_staff FOR EACH ROW EXECUTE PROCEDURE public.trigger_set_timestamp();
|
||||
|
||||
|
||||
--
|
||||
-- Name: task_image task_image_task_id_fk; Type: FK CONSTRAINT; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.task_image
|
||||
ADD CONSTRAINT task_image_task_id_fk FOREIGN KEY (task_id) REFERENCES public.task(id) ON UPDATE CASCADE ON DELETE CASCADE;
|
||||
|
||||
|
||||
--
|
||||
-- PostgreSQL database dump complete
|
||||
--
|
||||
|
||||
143
postgres/tables.sql
Normal file
143
postgres/tables.sql
Normal file
@@ -0,0 +1,143 @@
|
||||
--
|
||||
-- PostgreSQL database dump
|
||||
--
|
||||
|
||||
-- Dumped from database version 10.9
|
||||
-- Dumped by pg_dump version 12.5
|
||||
|
||||
\c tj_project
|
||||
|
||||
SET statement_timeout = 0;
|
||||
SET lock_timeout = 0;
|
||||
SET idle_in_transaction_session_timeout = 0;
|
||||
SET client_encoding = 'UTF8';
|
||||
SET standard_conforming_strings = on;
|
||||
SELECT pg_catalog.set_config('search_path', '', false);
|
||||
SET check_function_bodies = false;
|
||||
SET xmloption = content;
|
||||
SET client_min_messages = warning;
|
||||
SET row_security = off;
|
||||
|
||||
--
|
||||
-- Data for Name: user_permission; Type: TABLE DATA; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COPY public.user_permission (id, description, create_time, update_time) FROM stdin;
|
||||
1 task:assign 2019-08-31 14:19:35.575579 2019-10-02 10:31:40.271308
|
||||
5 task:changeCellToUser 2019-09-03 20:30:46.841232 2019-10-02 10:37:04.694562
|
||||
8 task:changeDataToUser 2019-09-06 17:07:08.275077 2019-10-02 10:38:06.45885
|
||||
9 image:readById 2019-09-17 13:56:53.821037 2019-10-02 10:38:21.167537
|
||||
10 image:readAll 2019-09-21 11:22:57.499138 2019-10-02 10:38:24.540783
|
||||
11 route:insert 2019-09-21 11:23:07.825939 2019-10-02 10:39:23.960188
|
||||
12 draft:insert 2019-09-22 17:32:04.898064 2019-10-02 10:40:00.7865
|
||||
13 draft:readField 2019-09-22 17:32:11.280443 2019-10-02 10:40:37.917048
|
||||
4 taskCell:readByUser 2019-09-03 18:15:23.726681 2019-10-02 10:41:50.32412
|
||||
3 taskCell:readAll 2019-08-31 14:19:35.575579 2019-10-02 10:42:16.975154
|
||||
2 task:read 2019-08-31 14:19:35.575579 2019-10-02 10:42:38.926339
|
||||
14 user:read 2019-09-22 17:32:15.992382 2019-10-02 10:44:23.348406
|
||||
15 user:readWorker 2019-09-22 17:32:35.548298 2019-10-02 10:44:33.080585
|
||||
16 user:changeRole 2019-09-26 12:47:46.917506 2019-10-02 10:45:25.811784
|
||||
17 image:upload 2019-10-05 14:36:39.893348 2019-10-05 14:36:39.893348
|
||||
20 task:readWorker 2019-10-28 10:19:27.442628 2019-10-28 10:19:27.442628
|
||||
21 task:checkWorkerStatus 2019-10-28 22:14:59.969087 2019-10-28 22:14:59.969087
|
||||
19 task:deleteWorker 2019-10-24 22:06:08.085745 2019-10-28 22:15:57.361321
|
||||
18 task:appendWorkersToTask 2019-10-24 22:05:51.995991 2019-10-28 22:16:25.889528
|
||||
23 task:deleteWorkerFromCell 2019-10-28 22:17:57.761998 2019-10-28 22:17:57.761998
|
||||
22 task:appendWorkersToCell 2019-10-28 22:16:28.807395 2019-12-02 15:40:56.904664
|
||||
24 user:new 2019-12-02 15:41:23.812324 2019-12-02 15:44:31.483289
|
||||
\.
|
||||
|
||||
|
||||
--
|
||||
-- Data for Name: user_role; Type: TABLE DATA; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COPY public.user_role (id, name, create_time, update_time, code) FROM stdin;
|
||||
1 SuperAdmin 2019-08-31 14:18:26.330858 2019-10-28 16:26:56.834742 1234
|
||||
2 Leader 2019-08-31 14:18:26.330858 2019-10-28 16:26:58.388278 1235
|
||||
3 Admin 2019-08-31 14:18:26.330858 2019-10-28 16:27:03.116832 1236
|
||||
4 Worker 2019-08-31 14:18:26.330858 2019-10-28 16:27:16.036296 1237
|
||||
5 Operator 2019-12-13 10:40:31.519547 2019-12-13 10:40:31.519547 1238
|
||||
\.
|
||||
|
||||
|
||||
--
|
||||
-- Data for Name: user_role_code; Type: TABLE DATA; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COPY public.user_role_code (id, code, role) FROM stdin;
|
||||
1 1234 1
|
||||
2 1235 2
|
||||
3 1236 3
|
||||
4 1237 4
|
||||
\.
|
||||
|
||||
|
||||
--
|
||||
-- Data for Name: user_role_permission; Type: TABLE DATA; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
COPY public.user_role_permission (id, role, permission, create_time, update_time) FROM stdin;
|
||||
4 3 4 2019-09-03 18:16:08.794205 2019-09-03 18:16:08.794205
|
||||
2 3 2 2019-08-31 14:15:36.318695 2019-09-03 19:52:45.774985
|
||||
1 3 1 2019-08-31 14:15:36.318695 2019-09-03 19:52:56.065802
|
||||
9 3 16 2019-09-03 20:31:19.021642 2019-10-02 10:52:25.439733
|
||||
3 3 3 2019-08-31 14:15:36.318695 2019-10-02 10:52:28.279986
|
||||
5 3 5 2019-09-03 19:53:59.515434 2019-10-02 10:52:29.78855
|
||||
6 3 8 2019-09-03 19:54:05.128648 2019-10-02 10:52:31.211962
|
||||
7 3 14 2019-09-03 19:54:10.39031 2019-10-02 10:52:32.402753
|
||||
8 3 15 2019-09-03 19:54:15.313807 2019-10-02 10:52:38.751726
|
||||
10 4 9 2019-09-06 17:07:41.129591 2019-10-02 10:52:57.190981
|
||||
11 4 10 2019-09-17 13:57:19.906336 2019-10-02 10:53:00.996116
|
||||
12 4 11 2019-09-21 11:23:56.517606 2019-10-02 10:53:12.855955
|
||||
13 4 12 2019-09-21 11:24:01.694544 2019-10-02 10:53:14.285944
|
||||
14 4 13 2019-09-22 17:32:59.032636 2019-10-02 10:53:16.372835
|
||||
15 3 9 2019-10-05 10:34:09.764426 2019-10-05 10:34:09.764426
|
||||
16 3 10 2019-10-05 10:34:17.086963 2019-10-05 10:34:26.680047
|
||||
17 3 17 2019-10-05 14:36:55.519405 2019-10-05 14:36:55.519405
|
||||
18 3 18 2019-10-24 22:06:39.062327 2019-10-24 22:06:39.062327
|
||||
19 3 19 2019-10-24 22:06:47.173313 2019-10-24 22:06:47.173313
|
||||
20 3 20 2019-10-28 10:19:40.53637 2019-10-28 10:19:40.53637
|
||||
22 3 22 2019-10-28 22:16:35.837969 2019-10-28 22:16:35.837969
|
||||
21 3 21 2019-10-28 22:15:10.604473 2019-10-28 22:16:37.872189
|
||||
23 3 23 2019-10-28 22:18:03.235823 2019-10-28 22:18:03.235823
|
||||
24 3 24 2019-12-02 15:41:37.668403 2019-12-02 15:41:47.024277
|
||||
25 5 1 2019-12-13 11:36:43.022671 2019-12-13 11:36:43.022671
|
||||
26 5 2 2019-12-13 11:36:51.911982 2019-12-13 11:36:51.911982
|
||||
27 5 3 2019-12-13 11:37:00.407219 2019-12-13 11:37:00.407219
|
||||
28 5 4 2019-12-13 11:37:08.260826 2019-12-13 11:37:08.260826
|
||||
29 5 5 2019-12-13 11:37:13.422231 2019-12-13 11:37:13.422231
|
||||
30 5 8 2019-12-13 11:37:21.09809 2019-12-13 11:37:21.09809
|
||||
31 5 18 2019-12-13 11:37:39.726519 2019-12-13 11:37:39.726519
|
||||
32 5 19 2019-12-13 11:37:44.602842 2019-12-13 11:37:44.602842
|
||||
33 5 20 2019-12-13 11:37:51.401845 2019-12-13 11:37:51.401845
|
||||
34 5 21 2019-12-13 11:37:56.59423 2019-12-13 11:37:56.59423
|
||||
35 5 22 2019-12-13 11:38:10.321722 2019-12-13 11:38:10.321722
|
||||
36 5 23 2019-12-13 11:38:17.356067 2019-12-13 11:38:17.356067
|
||||
\.
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_permission_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
SELECT pg_catalog.setval('public.user_permission_id_seq', 25, true);
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_role_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
SELECT pg_catalog.setval('public.user_role_id_seq', 6, false);
|
||||
|
||||
|
||||
--
|
||||
-- Name: user_role_premission_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres
|
||||
--
|
||||
|
||||
SELECT pg_catalog.setval('public.user_role_premission_id_seq', 37, true);
|
||||
|
||||
|
||||
--
|
||||
-- PostgreSQL database dump complete
|
||||
--
|
||||
4030
replay_pid26132.log
Normal file
4030
replay_pid26132.log
Normal file
File diff suppressed because one or more lines are too long
79
src/main/java/cn/edu/whu/boot/BootApplication.java
Normal file
79
src/main/java/cn/edu/whu/boot/BootApplication.java
Normal file
@@ -0,0 +1,79 @@
|
||||
package cn.edu.whu.boot;
|
||||
|
||||
import cn.edu.whu.boot.common.domain.CommonConstant;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
|
||||
import org.springframework.cache.annotation.EnableCaching;
|
||||
import org.springframework.scheduling.annotation.EnableAsync;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@SpringBootApplication
|
||||
@MapperScan("cn.edu.whu.boot.*.mapper")
|
||||
@EnableAsync
|
||||
@EnableCaching
|
||||
public class BootApplication extends SpringBootServletInitializer implements CommandLineRunner{
|
||||
|
||||
/**
|
||||
* 必要的文件夹对应的路径
|
||||
*/
|
||||
@Value("${MediaPath}")
|
||||
private String mediaPath;
|
||||
|
||||
@Value("${HistoryMediaPath}")
|
||||
private String historyMediaPath;
|
||||
@Value("${XmlFilePath}")
|
||||
private String xmlFilePath;
|
||||
@Value("${tpk.root}")
|
||||
private String tpkRoot;
|
||||
@Value("${tpkx.root}")
|
||||
private String tpkxRoot;
|
||||
@Value("${ApkFilePath}")
|
||||
private String apkFilePath;
|
||||
@Value("${photozippath}")
|
||||
private String photozippath;
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(BootApplication.class, args);
|
||||
}
|
||||
|
||||
/**
|
||||
* 打成war包需要
|
||||
*/
|
||||
@Override
|
||||
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
|
||||
return super.configure(builder);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 创建必要的文件夹
|
||||
*/
|
||||
@Override
|
||||
public void run(String... args) throws Exception{
|
||||
|
||||
|
||||
List<String> paths = new ArrayList<>();
|
||||
paths.add(mediaPath);
|
||||
paths.add(historyMediaPath);
|
||||
paths.add(xmlFilePath);
|
||||
paths.add(tpkRoot);
|
||||
paths.add(tpkxRoot);
|
||||
paths.add(CommonConstant.TEMP_FILE_PATHNAME);
|
||||
paths.add(apkFilePath);
|
||||
paths.add(photozippath);
|
||||
paths.forEach(path -> {
|
||||
File file = new File(path);
|
||||
if(!file.exists()){
|
||||
file.mkdirs();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
package cn.edu.whu.boot.allocation.controllers;
|
||||
|
||||
import cn.edu.whu.boot.allocation.controllers.dtos.TableField;
|
||||
import cn.edu.whu.boot.allocation.entities.Draft;
|
||||
import cn.edu.whu.boot.allocation.services.DraftService;
|
||||
import cn.edu.whu.boot.common.utils.collection.OtherUtil;
|
||||
import cn.edu.whu.boot.common.domain.ResultMessage;
|
||||
import cn.edu.whu.boot.common.utils.collection.PostgreSqlUtil;
|
||||
import cn.edu.whu.boot.xml.service.ITaskService;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.util.Base64;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/draft")
|
||||
public class DraftController {
|
||||
|
||||
@Autowired
|
||||
private DraftService draftService;
|
||||
|
||||
@Autowired
|
||||
private ITaskService taskService;
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(DraftController.class);
|
||||
|
||||
@RequestMapping("/insert")
|
||||
@ResponseBody
|
||||
public ResultMessage insertDraft(@RequestParam("detail") @NotBlank(message = "数据不能为空") String detail)
|
||||
{
|
||||
JSONObject jsonObject = JSON.parseObject(detail);
|
||||
int taskId = jsonObject.getInteger("taskId");
|
||||
JSONObject draftJsonObj = jsonObject.getJSONObject("draft");
|
||||
Draft draft = JSON.toJavaObject(draftJsonObj, Draft.class);
|
||||
draft.setDate(OtherUtil.changeTimeString(draft.getDate()));
|
||||
byte[] shapeByte = Base64.getDecoder().decode(draft.getShape());
|
||||
draft.setShape(new String(shapeByte));
|
||||
draftService.insert(PostgreSqlUtil.transformString(taskService.getTaskById(taskId).getDatabaseName()), draft);
|
||||
return ResultMessage.success(null);
|
||||
}
|
||||
|
||||
@RequestMapping("/fields")
|
||||
@ResponseBody
|
||||
public ResultMessage getDraftField() {
|
||||
|
||||
Map<String, TableField> map = new HashMap<>();
|
||||
TableField tableField;
|
||||
|
||||
tableField = new TableField();
|
||||
tableField.setName("upload");
|
||||
tableField.setType("int");
|
||||
tableField.setChinese("ID");
|
||||
map.put("upload", tableField);
|
||||
|
||||
tableField = new TableField();
|
||||
tableField.setName("userName");
|
||||
tableField.setType("String");
|
||||
tableField.setChinese("采集人员");
|
||||
map.put("userName", tableField);
|
||||
|
||||
tableField = new TableField();
|
||||
tableField.setName("date");
|
||||
tableField.setType("Date");
|
||||
tableField.setChinese("绘制时间");
|
||||
map.put("date", tableField);
|
||||
|
||||
tableField = new TableField();
|
||||
tableField.setName("shape");
|
||||
tableField.setType("String");
|
||||
tableField.setChinese("草图shape");
|
||||
map.put("shape", tableField);
|
||||
|
||||
tableField = new TableField();
|
||||
tableField.setName("uploadTime");
|
||||
tableField.setType("Date");
|
||||
tableField.setChinese("上传时间");
|
||||
map.put("uploadTime", tableField);
|
||||
|
||||
return new ResultMessage<>(true, "成功获取草图表字段对照名称", map);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,329 @@
|
||||
package cn.edu.whu.boot.allocation.controllers;
|
||||
|
||||
|
||||
import cn.edu.whu.boot.allocation.controllers.dtos.ImageWithUrl;
|
||||
import cn.edu.whu.boot.allocation.controllers.dtos.MapServerInitialExtent;
|
||||
import cn.edu.whu.boot.allocation.controllers.dtos.MapServerRoot;
|
||||
import cn.edu.whu.boot.allocation.entities.Image;
|
||||
import cn.edu.whu.boot.allocation.services.ImageService;
|
||||
import cn.edu.whu.boot.allocation.services.TaskCellService;
|
||||
import cn.edu.whu.boot.allocation.services.TaskInfoService;
|
||||
import cn.edu.whu.boot.common.domain.ResultMessage;
|
||||
import cn.edu.whu.boot.common.utils.allocation.TpkEncryptHelper;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.apache.commons.io.FilenameUtils;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.locationtech.jts.geom.Coordinate;
|
||||
import org.locationtech.jts.geom.GeometryFactory;
|
||||
import org.locationtech.jts.geom.Polygon;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.core.io.ByteArrayResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Positive;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
@RestController
|
||||
@Validated
|
||||
public class ImageController {
|
||||
|
||||
private final ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
private final GeometryFactory geometryFactory = new GeometryFactory();
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(ImageController.class);
|
||||
|
||||
private final TaskCellService taskCellService;
|
||||
|
||||
private final ImageService imageService;
|
||||
|
||||
private final TaskInfoService taskInfoService;
|
||||
|
||||
@Value("${tpk.root}")
|
||||
private String tpkRoot;
|
||||
|
||||
@Value("${tpkx.root}")
|
||||
private String tpkxRoot;
|
||||
|
||||
public ImageController(TaskCellService taskCellService, ImageService imageService, TaskInfoService taskInfoService) {
|
||||
this.taskCellService = taskCellService;
|
||||
this.imageService = imageService;
|
||||
this.taskInfoService = taskInfoService;
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传影像文件,加密之后存在服务器上
|
||||
*
|
||||
* @param taskId 任务 ID
|
||||
* @param file 影像文件
|
||||
*/
|
||||
@RequestMapping("/image/new")
|
||||
@ResponseBody
|
||||
public ResultMessage uploadImage(@RequestParam("image") @NotNull(message = "必须上传影像文件")
|
||||
MultipartFile file,
|
||||
@RequestParam @Positive
|
||||
int taskId) throws Exception {
|
||||
// 检查上传的文件
|
||||
if (file.getSize() == 0) {
|
||||
throw new Exception("上传的文件没有内容");
|
||||
}
|
||||
Optional<String> optionalFilename = Optional.ofNullable(file.getOriginalFilename());
|
||||
optionalFilename.orElseThrow(() -> new Exception("非法的文件名"));
|
||||
String filename = optionalFilename.get();
|
||||
if (!filename.endsWith(".tpk")) {
|
||||
throw new Exception("上传的不是 .tpk 文件");
|
||||
}
|
||||
String tpkFilename = taskId + "_" + filename;
|
||||
String tpkxFilename = tpkFilename.substring(0, tpkFilename.lastIndexOf(".") + 1) + "tpkx";
|
||||
if (imageService.countByFilename(tpkxFilename) != 0) {
|
||||
throw new Exception("存在同名文件,请更改文件名");
|
||||
}
|
||||
|
||||
String tpkUrl = tpkRoot + tpkFilename;
|
||||
try (InputStream in = file.getInputStream()) {
|
||||
// 将 .tpk 文件存在本地
|
||||
File tpkFile = new File(tpkUrl);
|
||||
if (tpkFile.exists()) {
|
||||
Files.delete(Paths.get(tpkUrl));
|
||||
}
|
||||
Files.copy(in, tpkFile.toPath());
|
||||
// 加密
|
||||
TpkEncryptHelper.encryptTpk(tpkUrl, tpkxRoot);
|
||||
// 解析 TPK 文件,获取经纬度范围
|
||||
MapServerInitialExtent extent = getExtentFromTPK(tpkUrl);
|
||||
if (extent == null) {
|
||||
throw new Exception("无法从 TPK 中获取经纬度范围");
|
||||
}
|
||||
// 在 task_image 中插入一条新记录
|
||||
int id = imageService.insert(new Image(tpkxFilename, taskId, extent.getXmin(), extent.getYmin(), extent.getXmax(), extent.getYmax()));
|
||||
ResultMessage<Integer> message = new ResultMessage<>(true, "成功上传影像");
|
||||
message.setData(id);
|
||||
return message;
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getMessage());
|
||||
return new ResultMessage<>(false, "上传失败");
|
||||
} finally {
|
||||
// 删除原始 TPK 文件,保证服务器上只保存加密后的文件
|
||||
try {
|
||||
Files.delete(Paths.get(tpkUrl));
|
||||
} catch (Exception e) {
|
||||
logger.warn("无法删除 TPK:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private MapServerInitialExtent getExtentFromTPK(String tpkUrl) throws IOException {
|
||||
try (ZipFile zip = new ZipFile(tpkUrl)) {
|
||||
for (Enumeration<? extends ZipEntry> e = zip.entries(); e.hasMoreElements(); ) {
|
||||
ZipEntry entry = e.nextElement();
|
||||
if (!entry.isDirectory()) {
|
||||
if (FilenameUtils.getName(entry.getName()).equals("mapserver.json")) {
|
||||
try (InputStream in = zip.getInputStream(entry)) {
|
||||
MapServerRoot root = JSON.parseObject(IOUtils.toString(in, StandardCharsets.UTF_8), MapServerRoot.class);
|
||||
return root.getContents().getInitialExtent();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
throw new IOException("TPK 不包含 mapserver.json");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定任务的影像文件
|
||||
*
|
||||
* @param taskId 任务 ID
|
||||
* @param page 页码
|
||||
* @param count 每页的数据量
|
||||
*/
|
||||
@RequestMapping("/images")
|
||||
@ResponseBody
|
||||
public ResultMessage getImagesByTaskId(@RequestParam @Positive int taskId,
|
||||
@RequestParam(defaultValue = "1") @Positive int page,
|
||||
@RequestParam(defaultValue = "10") @Positive int count) {
|
||||
// 统计该任务的影像文件
|
||||
int total = imageService.countByTaskId(taskId);
|
||||
int totalPages = (int) Math.ceil((double) total / count);
|
||||
if (page > totalPages) {
|
||||
return new ResultMessage<>(false, "请求的页码大于总页数");
|
||||
}
|
||||
|
||||
// 获取指定范围内的数据
|
||||
List<Map<String, Object>> images = imageService.findByTaskIdPaginated(taskId, page, count);
|
||||
|
||||
Map<String, Object> data = new HashMap<>();
|
||||
data.put("total", totalPages);
|
||||
data.put("data", images);
|
||||
return new ResultMessage<>(true, "成功获取影像文件列表", data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除影像文件
|
||||
*
|
||||
* @param str 影像文件 ID 列表字符串,每个 ID 之间用逗号隔开
|
||||
*/
|
||||
@RequestMapping("/image/delete")
|
||||
@ResponseBody
|
||||
public ResultMessage deleteImages(@RequestParam("ids") @NotBlank String str) {
|
||||
List<Integer> ids = Arrays.stream(str.split(",")).mapToInt(Integer::parseInt).boxed().collect(Collectors.toList());
|
||||
List<String> filenames = imageService.findFilenamesInIds(ids);
|
||||
if (!filenames.isEmpty()) {
|
||||
for (String filename : filenames) {
|
||||
try {
|
||||
// 删除原始 TPK 文件
|
||||
File tpkFile = new File(tpkRoot + filename.replace(".tpkx", ".tpk"));
|
||||
if (tpkFile.exists()) {
|
||||
if (!tpkFile.delete()) {
|
||||
logger.warn("无法删除 TPK 文件 " + tpkFile.getPath());
|
||||
}
|
||||
}
|
||||
// 删除加密文件
|
||||
File tpkxFile = new File(tpkxRoot + filename);
|
||||
if (tpkxFile.exists()) {
|
||||
if (!tpkxFile.delete()) {
|
||||
logger.warn("无法删除 TPKX 文件 " + tpkxFile.getPath());
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.warn(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
imageService.deleteInIds(ids);
|
||||
return new ResultMessage<>(true, "成功删除文件");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 外业人员获取某个任务中与其相关的所有影像
|
||||
*
|
||||
* @param taskId 任务 ID
|
||||
* @param userId 外业人员 ID
|
||||
*/
|
||||
@RequestMapping("/image/all")
|
||||
@ResponseBody
|
||||
public ResultMessage getImageList(@RequestParam("taskId")
|
||||
@NotNull(message = "任务 ID 不能为空")
|
||||
int taskId,
|
||||
@RequestParam("userId")
|
||||
@NotNull(message = "人员 ID 不能为空")
|
||||
int userId) {
|
||||
// 获取该任务对应的影像
|
||||
List<Image> images = imageService.findByTaskId(taskId);
|
||||
if (taskInfoService.isTaskAllocationOptional(taskId)) {
|
||||
List<ImageWithUrl> result = images
|
||||
.stream()
|
||||
.map(image -> new ImageWithUrl(image.getId(), "/tpkx/" + image.getFilename(), image.getMinLon(), image.getMinLat(), image.getMaxLon(), image.getMaxLat()))
|
||||
.collect(Collectors.toList());
|
||||
return new ResultMessage<>(true, "成功获取影像列表", result);
|
||||
}
|
||||
|
||||
// 获取任务涉及的网格
|
||||
List<ImageWithUrl> filteredImages = new ArrayList<>();
|
||||
List<Polygon> cells = new ArrayList<>();
|
||||
for (String geojson : taskCellService.findGeojsonByTaskIdAndUserId(taskId, userId)) {
|
||||
Polygon cell = fromGeoJsonToPolygon(geojson);
|
||||
if (cell != null) {
|
||||
cells.add(cell);
|
||||
}
|
||||
}
|
||||
// 筛选出与任务网格相交的影像
|
||||
if (!cells.isEmpty()) {
|
||||
for (Image image : images) {
|
||||
double xmin = image.getMinLon();
|
||||
double ymin = image.getMinLat();
|
||||
double xmax = image.getMaxLon();
|
||||
double ymax = image.getMaxLat();
|
||||
Coordinate[] shell = {new Coordinate(xmin, ymin), new Coordinate(xmin, ymax), new Coordinate(xmax, ymax), new Coordinate(xmax, ymin), new Coordinate(xmin, ymin)};
|
||||
Polygon imageBoundary = geometryFactory.createPolygon(shell);
|
||||
for (Polygon cell : cells) {
|
||||
if (cell.intersects(imageBoundary)) {
|
||||
filteredImages.add(new ImageWithUrl(image.getId(), "/tpkx/" + image.getFilename(), xmin, ymin, xmax, ymax));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return new ResultMessage<>(true, "成功获取影像列表", filteredImages);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将 GeoJSON 字符串转换为 org.locationtech.jts.geom.Polygon 对象
|
||||
*
|
||||
* @param geojson 表示一个多边形的 GeoJSON 字符串
|
||||
* @return org.locationtech.jts.geom.Polygon 对象
|
||||
*/
|
||||
private Polygon fromGeoJsonToPolygon(String geojson) {
|
||||
if (geojson == null || geojson.equals("")) {
|
||||
return null;
|
||||
}
|
||||
org.geojson.Feature feature;
|
||||
try {
|
||||
feature = objectMapper.readValue(geojson, org.geojson.Feature.class);
|
||||
} catch (IOException e) {
|
||||
logger.error("无法解析数据:{},数据应为标准的 GeoJSON 格式", geojson);
|
||||
return null;
|
||||
}
|
||||
Coordinate[] shell = ((org.geojson.Polygon) feature.getGeometry())
|
||||
.getCoordinates()
|
||||
.stream()
|
||||
.flatMap(lngLatAlts -> lngLatAlts.stream().map(lngLatAlt -> new Coordinate(lngLatAlt.getLongitude(), lngLatAlt.getLatitude())))
|
||||
.toArray(Coordinate[]::new);
|
||||
return geometryFactory.createPolygon(shell);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回加密影像的 URL
|
||||
*
|
||||
* @param imageId 影像 ID
|
||||
*/
|
||||
@RequestMapping("/image")
|
||||
@ResponseBody
|
||||
public ResultMessage getImageUrl(@RequestParam("imageId")
|
||||
@NotNull(message = "必须上传影像 ID")
|
||||
int imageId) throws Exception {
|
||||
Optional<String> optional = imageService.findFilenameById(imageId);
|
||||
if (!optional.isPresent()) {
|
||||
throw new Exception("影像不存在");
|
||||
}
|
||||
return new ResultMessage<>(true, "成功获取影像 URL", "/tpkx/" + optional.get());
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载加密 TPKX 影像
|
||||
*
|
||||
* @param filename .tpkx 文件名
|
||||
* @throws IOException 读取文件异常
|
||||
*/
|
||||
@RequestMapping("/tpkx/{filename}")
|
||||
public ResponseEntity<Resource> downloadImage(@PathVariable("filename") String filename) throws IOException {
|
||||
File tpkxFile = new File(tpkxRoot + filename);
|
||||
Path path = Paths.get(tpkxFile.getAbsolutePath());
|
||||
ByteArrayResource resource = new ByteArrayResource(Files.readAllBytes(path));
|
||||
return ResponseEntity
|
||||
.ok()
|
||||
.contentLength(tpkxFile.length())
|
||||
.contentType(MediaType.parseMediaType("application/octet-stream"))
|
||||
.body(resource);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
package cn.edu.whu.boot.allocation.controllers;
|
||||
|
||||
|
||||
import cn.edu.whu.boot.allocation.entities.RouteLine;
|
||||
import cn.edu.whu.boot.allocation.services.RouteLineService;
|
||||
import cn.edu.whu.boot.allocation.services.TaskUserRoleService;
|
||||
import cn.edu.whu.boot.collection.dto.Feature;
|
||||
import cn.edu.whu.boot.collection.dto.GeometryType;
|
||||
import cn.edu.whu.boot.common.domain.CommonConstant;
|
||||
import cn.edu.whu.boot.common.domain.ResultMessage;
|
||||
import cn.edu.whu.boot.common.utils.collection.PostgreSqlUtil;
|
||||
import cn.edu.whu.boot.user.entities.User;
|
||||
import cn.edu.whu.boot.user.services.UserService;
|
||||
import cn.edu.whu.boot.xml.domain.Task;
|
||||
import cn.edu.whu.boot.xml.service.ITaskService;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("route")
|
||||
public class RouteLineController {
|
||||
|
||||
@Autowired
|
||||
private RouteLineService routeLineService;
|
||||
|
||||
@Autowired
|
||||
private ITaskService taskService;
|
||||
|
||||
@Autowired
|
||||
private UserService userService;
|
||||
|
||||
@Autowired
|
||||
private TaskUserRoleService taskUserRoleService;
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(RouteLineController.class);
|
||||
|
||||
/**
|
||||
* 上传轨迹数据
|
||||
* @param detail 轨迹数据,格式为 JSON 字符串
|
||||
*/
|
||||
@RequestMapping(value="insert",produces="text/html;charset=UTF-8")
|
||||
public String uploadRoute(@RequestParam("detail") @NotEmpty(message = "数据不能为空") String detail)
|
||||
{
|
||||
|
||||
JSONObject jsonObject = JSON.parseObject(detail);
|
||||
int taskId = jsonObject.getInteger("taskId");
|
||||
JSONObject routeLineJsonObj = jsonObject.getJSONObject("routeLine");
|
||||
RouteLine routeLine = JSON.toJavaObject(routeLineJsonObj, RouteLine.class);
|
||||
routeLine.setUploadTime(new Date());
|
||||
byte[] result = Base64.getDecoder().decode(routeLine.getPolyline());
|
||||
|
||||
// routeLine的Polyline为标准的GeoJson格式,主要是方便网页端获取,要判断前端传来的是path还是point
|
||||
Feature feature = new Feature();
|
||||
feature.setType(CommonConstant.FEATURE);
|
||||
GeometryType geometryType = new GeometryType();
|
||||
JSONObject shapeJson = JSON.parseObject(new String(result));
|
||||
if (shapeJson.containsKey(CommonConstant.PATHS)){
|
||||
geometryType.setType(CommonConstant.LINESTRING);
|
||||
List<List<Double>> pathList = ((List<List<List<Double>>>)shapeJson.get(CommonConstant.PATHS)).get(0);
|
||||
geometryType.setCoordinates(pathList);
|
||||
}
|
||||
else{
|
||||
geometryType.setType(CommonConstant.POINT);
|
||||
List<Double> coordinateList = new ArrayList<>();
|
||||
coordinateList.add(shapeJson.getDouble(CommonConstant.X));
|
||||
coordinateList.add(shapeJson.getDouble(CommonConstant.Y));
|
||||
geometryType.setCoordinates(coordinateList);
|
||||
}
|
||||
feature.setGeometry(geometryType);
|
||||
routeLine.setPolyline(JSON.toJSONString(feature));
|
||||
Task task = taskService.getTaskById(taskId);
|
||||
routeLineService.insertRouteLine(PostgreSqlUtil.transformString(task.getDatabaseName()), routeLine);
|
||||
return new ResultMessage(true, "轨迹上传成功").toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取某个任务下所有工作人员的名单
|
||||
* @param taskId 任务id
|
||||
*/
|
||||
@RequestMapping(value="getWorkerForTask",produces="text/html;charset=UTF-8")
|
||||
public String getWorkerForTask(Integer taskId)
|
||||
{
|
||||
List<Map<String, String>> result = taskService
|
||||
.getWorkersByTask(taskId)
|
||||
.stream()
|
||||
.map(user -> {
|
||||
Map<String, String> map = new HashMap<>();
|
||||
map.put("userId", String.valueOf(user.getId()));
|
||||
map.put("userName", user.getUsername());
|
||||
return map;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
return result.isEmpty() ? new ResultMessage<>(false,"该任务下无工作人员", null).toString() : new ResultMessage<>(true,CommonConstant.SUCCEED, result).toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取某用户id在某个时间段内的轨迹数据,并以标准的Feature格式传给前端。数据库中的记录只要与该时间端相交就返回
|
||||
* @param taskId 任务Id
|
||||
* @param userId 用户Id
|
||||
* @param beginTime 开始时间
|
||||
* @param stopTime 结束时间
|
||||
*/
|
||||
@RequestMapping(value="getRouteByUserId",produces="text/html;charset=UTF-8")
|
||||
public String getRoute(Integer taskId, Integer userId, String beginTime, String stopTime)
|
||||
{
|
||||
Task task = taskService.getTaskById(taskId);
|
||||
User user = userService.findById(userId).get();
|
||||
List<RouteLine> routeLineStringList;
|
||||
if (beginTime != null && !beginTime.equals("") && stopTime != null && !stopTime.equals(""))
|
||||
{
|
||||
routeLineStringList = routeLineService.findByNameAndTime(PostgreSqlUtil.transformString(task.getDatabaseName()),
|
||||
user.getUsername(), beginTime, stopTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
routeLineStringList = routeLineService.findByName(PostgreSqlUtil.transformString(task.getDatabaseName()),
|
||||
user.getUsername());
|
||||
}
|
||||
if (routeLineStringList == null)
|
||||
{
|
||||
return new ResultMessage<>(false, "轨迹为空", null).toString();
|
||||
}
|
||||
else
|
||||
{
|
||||
return new ResultMessage<>(true, CommonConstant.SUCCEED, routeLineStringList).toString();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,50 @@
|
||||
package cn.edu.whu.boot.allocation.controllers.dtos;
|
||||
|
||||
public class Cell {
|
||||
private Worker worker;
|
||||
|
||||
private String geohash;
|
||||
|
||||
private String geojson;
|
||||
|
||||
public Cell()
|
||||
{
|
||||
}
|
||||
|
||||
public Cell(Worker worker , String geohash , String geojson)
|
||||
{
|
||||
this.worker = worker;
|
||||
this.geohash = geohash;
|
||||
this.geojson = geojson;
|
||||
}
|
||||
|
||||
public String getGeohash()
|
||||
{
|
||||
return geohash;
|
||||
}
|
||||
|
||||
public void setGeohash(String geohash)
|
||||
{
|
||||
this.geohash = geohash;
|
||||
}
|
||||
|
||||
public String getGeojson()
|
||||
{
|
||||
return geojson;
|
||||
}
|
||||
|
||||
public void setGeojson(String geojson)
|
||||
{
|
||||
this.geojson = geojson;
|
||||
}
|
||||
|
||||
public Worker getWorker()
|
||||
{
|
||||
return worker;
|
||||
}
|
||||
|
||||
public void setWorker(Worker worker)
|
||||
{
|
||||
this.worker = worker;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package cn.edu.whu.boot.allocation.controllers.dtos;
|
||||
|
||||
import org.geojson.Feature;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class CustomFeatureCollection {
|
||||
|
||||
private final String type = "FeatureCollection";
|
||||
|
||||
private final Map<String, Object> crs = new HashMap<String, Object>() {{
|
||||
put("type", "EPSG");
|
||||
put("properties", new HashMap<String, Object>() {{
|
||||
put("code", "4326");
|
||||
}});
|
||||
}};
|
||||
|
||||
public CustomFeatureCollection() {
|
||||
}
|
||||
|
||||
public CustomFeatureCollection(List<Feature> features) {
|
||||
this.features = features;
|
||||
}
|
||||
|
||||
private List<Feature> features;
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public Map<String, Object> getCrs() {
|
||||
return crs;
|
||||
}
|
||||
|
||||
public List<Feature> getFeatures() {
|
||||
return features;
|
||||
}
|
||||
|
||||
public void setFeatures(List<Feature> features) {
|
||||
this.features = features;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package cn.edu.whu.boot.allocation.controllers.dtos;
|
||||
|
||||
public class Data {
|
||||
private Worker worker;
|
||||
|
||||
private String table;
|
||||
|
||||
private Long id;
|
||||
|
||||
private String geojson;
|
||||
|
||||
public Data(Worker worker , String table , Long id , String geojson)
|
||||
{
|
||||
this.worker = worker;
|
||||
this.table = table;
|
||||
this.id = id;
|
||||
this.geojson = geojson;
|
||||
}
|
||||
|
||||
public Long getId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getGeojson()
|
||||
{
|
||||
return geojson;
|
||||
}
|
||||
|
||||
public void setGeojson(String geojson)
|
||||
{
|
||||
this.geojson = geojson;
|
||||
}
|
||||
|
||||
public Worker getWorker()
|
||||
{
|
||||
return worker;
|
||||
}
|
||||
|
||||
public void setWorker(Worker worker)
|
||||
{
|
||||
this.worker = worker;
|
||||
}
|
||||
|
||||
public String getTable()
|
||||
{
|
||||
return table;
|
||||
}
|
||||
|
||||
public void setTable(String table)
|
||||
{
|
||||
this.table = table;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
package cn.edu.whu.boot.allocation.controllers.dtos;
|
||||
|
||||
public class ImageWithUrl {
|
||||
private Integer id;
|
||||
|
||||
private String url;
|
||||
|
||||
private Double minLon;
|
||||
|
||||
private Double minLat;
|
||||
|
||||
private Double maxLon;
|
||||
|
||||
private Double maxLat;
|
||||
|
||||
public ImageWithUrl()
|
||||
{
|
||||
}
|
||||
|
||||
public ImageWithUrl(Integer id , String url , Double minLon , Double minLat , Double maxLon , Double maxLat)
|
||||
{
|
||||
this.id = id;
|
||||
this.url = url;
|
||||
this.minLon = minLon;
|
||||
this.minLat = minLat;
|
||||
this.maxLon = maxLon;
|
||||
this.maxLat = maxLat;
|
||||
}
|
||||
|
||||
public Integer getId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getUrl()
|
||||
{
|
||||
return url;
|
||||
}
|
||||
|
||||
public void setUrl(String url)
|
||||
{
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
public Double getMinLon()
|
||||
{
|
||||
return minLon;
|
||||
}
|
||||
|
||||
public void setMinLon(Double minLon)
|
||||
{
|
||||
this.minLon = minLon;
|
||||
}
|
||||
|
||||
public Double getMinLat()
|
||||
{
|
||||
return minLat;
|
||||
}
|
||||
|
||||
public void setMinLat(Double minLat)
|
||||
{
|
||||
this.minLat = minLat;
|
||||
}
|
||||
|
||||
public Double getMaxLon()
|
||||
{
|
||||
return maxLon;
|
||||
}
|
||||
|
||||
public void setMaxLon(Double maxLon)
|
||||
{
|
||||
this.maxLon = maxLon;
|
||||
}
|
||||
|
||||
public Double getMaxLat()
|
||||
{
|
||||
return maxLat;
|
||||
}
|
||||
|
||||
public void setMaxLat(Double maxLat)
|
||||
{
|
||||
this.maxLat = maxLat;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package cn.edu.whu.boot.allocation.controllers.dtos;
|
||||
|
||||
public class MapServerContents {
|
||||
private MapServerInitialExtent initialExtent;
|
||||
|
||||
public MapServerInitialExtent getInitialExtent() {
|
||||
return initialExtent;
|
||||
}
|
||||
|
||||
public void setInitialExtent(MapServerInitialExtent initialExtent) {
|
||||
this.initialExtent = initialExtent;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package cn.edu.whu.boot.allocation.controllers.dtos;
|
||||
|
||||
public class MapServerInitialExtent {
|
||||
private Double xmin;
|
||||
|
||||
private Double ymin;
|
||||
|
||||
private Double xmax;
|
||||
|
||||
private Double ymax;
|
||||
|
||||
public Double getXmin() {
|
||||
return xmin;
|
||||
}
|
||||
|
||||
public void setXmin(Double xmin) {
|
||||
this.xmin = xmin;
|
||||
}
|
||||
|
||||
public Double getYmin() {
|
||||
return ymin;
|
||||
}
|
||||
|
||||
public void setYmin(Double ymin) {
|
||||
this.ymin = ymin;
|
||||
}
|
||||
|
||||
public Double getXmax() {
|
||||
return xmax;
|
||||
}
|
||||
|
||||
public void setXmax(Double xmax) {
|
||||
this.xmax = xmax;
|
||||
}
|
||||
|
||||
public Double getYmax() {
|
||||
return ymax;
|
||||
}
|
||||
|
||||
public void setYmax(Double ymax) {
|
||||
this.ymax = ymax;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package cn.edu.whu.boot.allocation.controllers.dtos;
|
||||
|
||||
public class MapServerRoot {
|
||||
private MapServerContents contents;
|
||||
|
||||
public MapServerContents getContents() {
|
||||
return contents;
|
||||
}
|
||||
|
||||
public void setContents(MapServerContents contents) {
|
||||
this.contents = contents;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package cn.edu.whu.boot.allocation.controllers.dtos;
|
||||
|
||||
public class Pair<X, Y> {
|
||||
public final X x;
|
||||
public final Y y;
|
||||
public Pair(X x, Y y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package cn.edu.whu.boot.allocation.controllers.dtos;
|
||||
|
||||
public class TableField {
|
||||
|
||||
/**
|
||||
* 字段名
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 字段类型
|
||||
*/
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 是否为空
|
||||
*/
|
||||
private boolean notNull;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String comment;
|
||||
|
||||
/**
|
||||
* 中文名
|
||||
*/
|
||||
private String chinese;
|
||||
|
||||
//region getter and setter
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public boolean isNotNull() {
|
||||
return notNull;
|
||||
}
|
||||
|
||||
public void setNotNull(boolean notNull) {
|
||||
this.notNull = notNull;
|
||||
}
|
||||
|
||||
public String getComment() {
|
||||
return comment;
|
||||
}
|
||||
|
||||
public void setComment(String comment) {
|
||||
this.comment = comment;
|
||||
}
|
||||
|
||||
public String getChinese() {
|
||||
return chinese;
|
||||
}
|
||||
|
||||
public void setChinese(String chinese) {
|
||||
this.chinese = chinese;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
package cn.edu.whu.boot.allocation.controllers.dtos;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 用于接收外业人员列表
|
||||
*/
|
||||
public class Worker {
|
||||
private Integer id;
|
||||
|
||||
private String username;
|
||||
|
||||
// 0: 采集人员
|
||||
// 1:审核人员
|
||||
private Integer role;
|
||||
|
||||
private String geohash;
|
||||
|
||||
private String geojson;
|
||||
|
||||
public Worker() {
|
||||
}
|
||||
|
||||
public Worker(Integer id, String username, Integer role) {
|
||||
this.id = id;
|
||||
this.username = username;
|
||||
this.role = role;
|
||||
}
|
||||
|
||||
public Worker(Integer id, Integer role, String geohash) {
|
||||
this.id = id;
|
||||
this.role = role;
|
||||
this.geohash = geohash;
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Integer getRole() {
|
||||
return role;
|
||||
}
|
||||
|
||||
public void setRole(Integer role) {
|
||||
this.role = role;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否为采集人员
|
||||
*/
|
||||
public boolean isCollector() {
|
||||
return role.equals(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否为审核人员
|
||||
*/
|
||||
public boolean isInspector() {
|
||||
return role.equals(1);
|
||||
}
|
||||
|
||||
public String getGeohash() {
|
||||
return geohash;
|
||||
}
|
||||
|
||||
public void setGeohash(String geohash) {
|
||||
this.geohash = geohash;
|
||||
}
|
||||
|
||||
public String getGeojson() {
|
||||
return geojson;
|
||||
}
|
||||
|
||||
public void setGeojson(String geojson) {
|
||||
this.geojson = geojson;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
Worker worker = (Worker) o;
|
||||
return Objects.equals(id, worker.id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(id);
|
||||
}
|
||||
}
|
||||
60
src/main/java/cn/edu/whu/boot/allocation/entities/Draft.java
Normal file
60
src/main/java/cn/edu/whu/boot/allocation/entities/Draft.java
Normal file
@@ -0,0 +1,60 @@
|
||||
package cn.edu.whu.boot.allocation.entities;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class Draft implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 928802847368958369L;
|
||||
|
||||
private Integer iD;
|
||||
|
||||
private Integer collectorId;
|
||||
|
||||
private String userName;
|
||||
|
||||
private String date;
|
||||
|
||||
private String shape;
|
||||
|
||||
public String getShape() {
|
||||
return shape;
|
||||
}
|
||||
|
||||
public void setShape(String shape) {
|
||||
this.shape = shape;
|
||||
}
|
||||
|
||||
public String getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
public void setDate(String date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
public String getUserName() {
|
||||
return userName;
|
||||
}
|
||||
|
||||
public void setUserName(String userName) {
|
||||
this.userName = userName;
|
||||
}
|
||||
|
||||
public Integer getiD()
|
||||
{
|
||||
return iD;
|
||||
}
|
||||
|
||||
public void setiD(Integer iD)
|
||||
{
|
||||
this.iD = iD;
|
||||
}
|
||||
|
||||
public Integer getCollectorId() {
|
||||
return collectorId;
|
||||
}
|
||||
|
||||
public void setCollectorId(Integer collectorId) {
|
||||
this.collectorId = collectorId;
|
||||
}
|
||||
}
|
||||
90
src/main/java/cn/edu/whu/boot/allocation/entities/Image.java
Normal file
90
src/main/java/cn/edu/whu/boot/allocation/entities/Image.java
Normal file
@@ -0,0 +1,90 @@
|
||||
package cn.edu.whu.boot.allocation.entities;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class Image implements Serializable{
|
||||
|
||||
private static final long serialVersionUID = -3667769005593579199L;
|
||||
|
||||
private Integer id;
|
||||
|
||||
private Integer taskId;
|
||||
|
||||
private String filename;
|
||||
|
||||
private Double minLon;
|
||||
|
||||
private Double minLat;
|
||||
|
||||
private Double maxLon;
|
||||
|
||||
private Double maxLat;
|
||||
|
||||
public Image() {
|
||||
}
|
||||
|
||||
public Image(String filename, Integer taskId, Double minLon, Double minLat, Double maxLon, Double maxLat) {
|
||||
this.filename = filename;
|
||||
this.taskId = taskId;
|
||||
this.minLon = minLon;
|
||||
this.minLat = minLat;
|
||||
this.maxLon = maxLon;
|
||||
this.maxLat = maxLat;
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getFilename() {
|
||||
return filename;
|
||||
}
|
||||
|
||||
public void setFilename(String filename) {
|
||||
this.filename = filename;
|
||||
}
|
||||
|
||||
public Double getMinLon() {
|
||||
return minLon;
|
||||
}
|
||||
|
||||
public void setMinLon(Double minLon) {
|
||||
this.minLon = minLon;
|
||||
}
|
||||
|
||||
public Double getMinLat() {
|
||||
return minLat;
|
||||
}
|
||||
|
||||
public void setMinLat(Double minLat) {
|
||||
this.minLat = minLat;
|
||||
}
|
||||
|
||||
public Double getMaxLon() {
|
||||
return maxLon;
|
||||
}
|
||||
|
||||
public void setMaxLon(Double maxLon) {
|
||||
this.maxLon = maxLon;
|
||||
}
|
||||
|
||||
public Double getMaxLat() {
|
||||
return maxLat;
|
||||
}
|
||||
|
||||
public void setMaxLat(Double maxLat) {
|
||||
this.maxLat = maxLat;
|
||||
}
|
||||
|
||||
public Integer getTaskId() {
|
||||
return taskId;
|
||||
}
|
||||
|
||||
public void setTaskId(Integer taskId) {
|
||||
this.taskId = taskId;
|
||||
}
|
||||
}
|
||||
103
src/main/java/cn/edu/whu/boot/allocation/entities/RouteLine.java
Normal file
103
src/main/java/cn/edu/whu/boot/allocation/entities/RouteLine.java
Normal file
@@ -0,0 +1,103 @@
|
||||
package cn.edu.whu.boot.allocation.entities;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
public class RouteLine implements Serializable{
|
||||
|
||||
private static final long serialVersionUID = -4234791937496046197L;
|
||||
|
||||
private Integer id;
|
||||
|
||||
private Integer collectorId;
|
||||
|
||||
private String name;
|
||||
|
||||
private String polyline;
|
||||
|
||||
private String begindate;
|
||||
|
||||
private String stopdate;
|
||||
|
||||
private Date uploadTime;
|
||||
|
||||
private String primaryKeySeq;
|
||||
|
||||
public Integer getId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getPolyline()
|
||||
{
|
||||
return polyline;
|
||||
}
|
||||
|
||||
public void setPolyline(String polyline)
|
||||
{
|
||||
this.polyline = polyline;
|
||||
}
|
||||
|
||||
public String getBegindate()
|
||||
{
|
||||
return begindate;
|
||||
}
|
||||
|
||||
public void setBegindate(String begindate)
|
||||
{
|
||||
this.begindate = begindate;
|
||||
}
|
||||
|
||||
public String getStopdate()
|
||||
{
|
||||
return stopdate;
|
||||
}
|
||||
|
||||
public void setStopdate(String stopdate)
|
||||
{
|
||||
this.stopdate = stopdate;
|
||||
}
|
||||
|
||||
public Date getUploadTime()
|
||||
{
|
||||
return uploadTime;
|
||||
}
|
||||
|
||||
public void setUploadTime(Date uploadTime)
|
||||
{
|
||||
this.uploadTime = uploadTime;
|
||||
}
|
||||
|
||||
public String getPrimaryKeySeq()
|
||||
{
|
||||
return primaryKeySeq;
|
||||
}
|
||||
|
||||
public void setPrimaryKeySeq(String primaryKeySeq)
|
||||
{
|
||||
this.primaryKeySeq = primaryKeySeq;
|
||||
}
|
||||
|
||||
public Integer getCollectorId() {
|
||||
return collectorId;
|
||||
}
|
||||
|
||||
public void setCollectorId(Integer collectorId) {
|
||||
this.collectorId = collectorId;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
package cn.edu.whu.boot.allocation.entities;
|
||||
|
||||
public class TaskCell {
|
||||
private Integer id;
|
||||
|
||||
private Integer taskId;
|
||||
|
||||
private String geohash;
|
||||
|
||||
private String geojson;
|
||||
|
||||
public TaskCell() {
|
||||
}
|
||||
|
||||
public TaskCell(Integer taskId, String geohash, String geojson) {
|
||||
this.taskId = taskId;
|
||||
this.geohash = geohash;
|
||||
this.geojson = geojson;
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Integer getTaskId() {
|
||||
return taskId;
|
||||
}
|
||||
|
||||
public void setTaskId(Integer taskId) {
|
||||
this.taskId = taskId;
|
||||
}
|
||||
|
||||
public String getGeohash() {
|
||||
return geohash;
|
||||
}
|
||||
|
||||
public void setGeohash(String geohash) {
|
||||
this.geohash = geohash;
|
||||
}
|
||||
|
||||
public String getGeojson() {
|
||||
return geojson;
|
||||
}
|
||||
|
||||
public void setGeojson(String geojson) {
|
||||
this.geojson = geojson;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = 17;
|
||||
result = 31 * result + taskId.hashCode();
|
||||
result = 31 * result + geohash.hashCode();
|
||||
result = 31 * result + geojson.hashCode();
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (obj == this) {
|
||||
return true;
|
||||
}
|
||||
if (!(obj instanceof TaskCell)) {
|
||||
return false;
|
||||
}
|
||||
TaskCell it = (TaskCell) obj;
|
||||
return this.taskId.equals(it.taskId)
|
||||
&& this.geohash.equals(it.geohash)
|
||||
&& this.geojson.equals(it.geojson);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
package cn.edu.whu.boot.allocation.entities;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class TaskCellData implements Serializable{
|
||||
|
||||
private static final long serialVersionUID = -5939625198144474917L;
|
||||
private Integer id;
|
||||
|
||||
private Integer taskId;
|
||||
|
||||
private String tableName;
|
||||
|
||||
private Long dataId;
|
||||
|
||||
private String cellGeohash;
|
||||
|
||||
public TaskCellData() {
|
||||
}
|
||||
|
||||
public TaskCellData(Integer taskId, String tableName, Long dataId, String cellGeohash) {
|
||||
this.taskId = taskId;
|
||||
this.tableName = tableName;
|
||||
this.dataId = dataId;
|
||||
this.cellGeohash = cellGeohash;
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Integer getTaskId() {
|
||||
return taskId;
|
||||
}
|
||||
|
||||
public void setTaskId(Integer taskId) {
|
||||
this.taskId = taskId;
|
||||
}
|
||||
|
||||
public String getTableName() {
|
||||
return tableName;
|
||||
}
|
||||
|
||||
public void setTableName(String tableName) {
|
||||
this.tableName = tableName;
|
||||
}
|
||||
|
||||
public Long getDataId() {
|
||||
return dataId;
|
||||
}
|
||||
|
||||
public void setDataId(Long dataId) {
|
||||
this.dataId = dataId;
|
||||
}
|
||||
|
||||
public String getCellGeohash() {
|
||||
return cellGeohash;
|
||||
}
|
||||
|
||||
public void setCellGeohash(String cellGeohash) {
|
||||
this.cellGeohash = cellGeohash;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
package cn.edu.whu.boot.allocation.entities;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class TaskToUser implements Serializable{
|
||||
|
||||
private static final long serialVersionUID = -1638320551511254937L;
|
||||
|
||||
private Integer id;
|
||||
|
||||
private Integer task;
|
||||
|
||||
private Integer user;
|
||||
|
||||
private String cell;
|
||||
|
||||
private Integer captain;
|
||||
|
||||
public TaskToUser() {
|
||||
}
|
||||
|
||||
public TaskToUser(Integer task, Integer user, String cell, Integer captain) {
|
||||
this.task = task;
|
||||
this.user = user;
|
||||
this.cell = cell;
|
||||
this.captain = captain;
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Integer getTask() {
|
||||
return task;
|
||||
}
|
||||
|
||||
public void setTask(Integer task) {
|
||||
this.task = task;
|
||||
}
|
||||
|
||||
public Integer getUser() {
|
||||
return user;
|
||||
}
|
||||
|
||||
public void setUser(Integer user) {
|
||||
this.user = user;
|
||||
}
|
||||
|
||||
public String getCell() {
|
||||
return cell;
|
||||
}
|
||||
|
||||
public void setCell(String cell) {
|
||||
this.cell = cell;
|
||||
}
|
||||
|
||||
public Integer getCaptain() {
|
||||
return captain;
|
||||
}
|
||||
|
||||
public void setCaptain(Integer captain) {
|
||||
this.captain = captain;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package cn.edu.whu.boot.allocation.entities;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Objects;
|
||||
|
||||
public class TaskUserCell implements Serializable{
|
||||
|
||||
private static final long serialVersionUID = -1326635728899511955L;
|
||||
|
||||
private Integer id;
|
||||
|
||||
private Integer taskId;
|
||||
|
||||
private Integer userId;
|
||||
|
||||
private String cellGeohash;
|
||||
|
||||
public TaskUserCell() {
|
||||
}
|
||||
|
||||
public TaskUserCell(Integer taskId, Integer userId, String cellGeohash) {
|
||||
this.taskId = taskId;
|
||||
this.userId = userId;
|
||||
this.cellGeohash = cellGeohash;
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Integer getTaskId() {
|
||||
return taskId;
|
||||
}
|
||||
|
||||
public void setTaskId(Integer taskId) {
|
||||
this.taskId = taskId;
|
||||
}
|
||||
|
||||
public Integer getUserId() {
|
||||
return userId;
|
||||
}
|
||||
|
||||
public void setUserId(Integer userId) {
|
||||
this.userId = userId;
|
||||
}
|
||||
|
||||
public String getCellGeohash() {
|
||||
return cellGeohash;
|
||||
}
|
||||
|
||||
public void setCellGeohash(String cellGeohash) {
|
||||
this.cellGeohash = cellGeohash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
TaskUserCell that = (TaskUserCell) o;
|
||||
return taskId.equals(that.taskId) && userId.equals(that.userId) && cellGeohash.equals(that.cellGeohash);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(taskId, userId, cellGeohash);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
package cn.edu.whu.boot.allocation.entities;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class TaskUserRole implements Serializable{
|
||||
|
||||
private static final long serialVersionUID = 2002012690341409624L;
|
||||
private Integer id;
|
||||
|
||||
private Integer taskId;
|
||||
|
||||
private Integer userId;
|
||||
|
||||
// 1:审核人员
|
||||
// 0:采集人员
|
||||
private Integer workRole;
|
||||
|
||||
|
||||
public TaskUserRole() {
|
||||
}
|
||||
|
||||
public TaskUserRole(Integer taskId, Integer userId, Integer workRole) {
|
||||
this.taskId = taskId;
|
||||
this.userId = userId;
|
||||
this.workRole = workRole;
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Integer getTaskId() {
|
||||
return taskId;
|
||||
}
|
||||
|
||||
public void setTaskId(Integer taskId) {
|
||||
this.taskId = taskId;
|
||||
}
|
||||
|
||||
public Integer getUserId() {
|
||||
return userId;
|
||||
}
|
||||
|
||||
public void setUserId(Integer userId) {
|
||||
this.userId = userId;
|
||||
}
|
||||
|
||||
public Integer getWorkRole() {
|
||||
return workRole;
|
||||
}
|
||||
|
||||
public void setWorkRole(Integer workRole) {
|
||||
this.workRole = workRole;
|
||||
}
|
||||
|
||||
public boolean isCollector() {
|
||||
return this.workRole.equals(0);
|
||||
}
|
||||
|
||||
public boolean isInspector() {
|
||||
return this.workRole.equals(1);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package cn.edu.whu.boot.allocation.exceptions;
|
||||
|
||||
public class InvalidAssignmentStatus extends Exception {
|
||||
public InvalidAssignmentStatus() {
|
||||
super();
|
||||
}
|
||||
|
||||
public InvalidAssignmentStatus(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package cn.edu.whu.boot.allocation.exceptions;
|
||||
|
||||
public class InvalidShapefileException extends Exception {
|
||||
public InvalidShapefileException() {
|
||||
}
|
||||
|
||||
public InvalidShapefileException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package cn.edu.whu.boot.allocation.exceptions;
|
||||
|
||||
public class InvalidUserRoleCodeException extends Exception {
|
||||
public InvalidUserRoleCodeException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public InvalidUserRoleCodeException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package cn.edu.whu.boot.allocation.mapper;
|
||||
|
||||
import cn.edu.whu.boot.allocation.entities.Draft;
|
||||
import org.apache.ibatis.annotations.Options;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface DraftMapper {
|
||||
|
||||
int insert(@Param("databaseName") String databaseName , @Param("draft") Draft draft);
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package cn.edu.whu.boot.allocation.mapper;
|
||||
|
||||
import cn.edu.whu.boot.allocation.entities.Image;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Repository
|
||||
public interface ImageMapper {
|
||||
@Select("SELECT file_name FROM task_image WHERE id = #{id}")
|
||||
String findFilenameById(int id);
|
||||
|
||||
@Select("SELECT count(*) FROM task_image WHERE file_name = #{filename}")
|
||||
int countByFilename(String filename);
|
||||
|
||||
@Select({
|
||||
"<script>",
|
||||
"SELECT file_name FROM task_image",
|
||||
"WHERE id IN (<foreach collection='ids' item='id' separator=','>#{id}</foreach>)",
|
||||
"</script>"
|
||||
})
|
||||
List<String> findFilenamesByIds(@Param("ids") List<Integer> ids);
|
||||
|
||||
@Select("SELECT id, file_name, ST_XMin(bbox) as lon_min, ST_YMin(bbox) as lat_min, ST_XMax(bbox) as lon_max, ST_YMax(bbox) as lat_max " +
|
||||
"FROM task_image WHERE task_id = #{taskId}")
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "filename", column = "file_name"),
|
||||
@Result(property = "minLon", column = "lon_min"),
|
||||
@Result(property = "minLat", column = "lat_min"),
|
||||
@Result(property = "maxLon", column = "lon_max"),
|
||||
@Result(property = "maxLat", column = "lat_max")
|
||||
}
|
||||
)
|
||||
List<Image> findByTaskId(@Param("taskId") int taskId);
|
||||
|
||||
@Select("SELECT count(*) FROM task_image WHERE task_id = #{taskId}")
|
||||
int countByTaskId(@Param("taskId") int taskId);
|
||||
|
||||
@Select("SELECT id, substring(file_name, position('_' in file_name) + 1) as filename " +
|
||||
"FROM task_image WHERE task_id = #{taskId} " +
|
||||
"ORDER BY id " +
|
||||
"OFFSET (#{page} - 1) * #{count} LIMIT #{count}")
|
||||
List<Map<String, Object>> findByTaskIdPaginated(@Param("taskId") int taskId, @Param("page") int page, @Param("count") int count);
|
||||
|
||||
@Select("INSERT INTO task_image(file_name, task_id, bbox) " +
|
||||
"VALUES (#{filename}, #{taskId}, ST_MakeEnvelope(#{minLon}, #{minLat}, #{maxLon}, #{maxLat})) RETURNING id")
|
||||
@Options(flushCache = Options.FlushCachePolicy.TRUE)
|
||||
int insert(Image image);
|
||||
|
||||
@Delete({
|
||||
"<script>",
|
||||
"DELETE FROM task_image WHERE id IN (<foreach item='id' collection='ids' separator=','>#{id}</foreach>)",
|
||||
"</script>"
|
||||
})
|
||||
void deleteInIds(@Param("ids") List<Integer> ids);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package cn.edu.whu.boot.allocation.mapper;
|
||||
|
||||
import cn.edu.whu.boot.allocation.entities.RouteLine;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface RouteLineMapper {
|
||||
|
||||
void insert(@Param("databaseName") String databaseName, @Param("routeLine")RouteLine routeLine);
|
||||
|
||||
List<RouteLine> findByName(@Param("databaseName") String databaseName, @Param("name")String name);
|
||||
|
||||
List<RouteLine> findByNameAndTime(@Param("databaseName") String databaseName, @Param("name")String name,
|
||||
@Param("beginTime") String beginTime, @Param("stopTime") String stopTime);
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package cn.edu.whu.boot.allocation.mapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Options;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import org.apache.ibatis.annotations.Update;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface SimpleTaskMapper {
|
||||
@Update("UPDATE task SET is_allocation_optional = #{optional} WHERE id = #{taskId}")
|
||||
@Options(flushCache = Options.FlushCachePolicy.TRUE)
|
||||
void updateTaskAllocationOptional(@Param("taskId") int taskId, @Param("optional") int optional);
|
||||
|
||||
@Select("SELECT is_allocation_optional FROM task WHERE id = #{taskId}")
|
||||
Integer isTaskAllocationOptional(@Param("taskId") int taskId);
|
||||
}
|
||||
@@ -0,0 +1,179 @@
|
||||
package cn.edu.whu.boot.allocation.mapper;
|
||||
|
||||
import cn.edu.whu.boot.allocation.entities.TaskCellData;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface TaskCellDataMapper {
|
||||
@Select("SELECT id, task_id, table_name, data_id, cell_geohash FROM task_cell_data WHERE id = #{id}")
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "taskId", column = "task_id"),
|
||||
@Result(property = "tableName", column = "table_name"),
|
||||
@Result(property = "dataId", column = "data_id"),
|
||||
@Result(property = "cellGeohash", column = "cell_geohash")
|
||||
}
|
||||
)
|
||||
TaskCellData findById(@Param("id") int id);
|
||||
|
||||
@Select("SELECT id, task_id, table_name, data_id, cell_geohash FROM task_cell_data WHERE task_id = #{taskId}")
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "taskId", column = "task_id"),
|
||||
@Result(property = "tableName", column = "table_name"),
|
||||
@Result(property = "dataId", column = "data_id"),
|
||||
@Result(property = "cellGeohash", column = "cell_geohash")
|
||||
}
|
||||
)
|
||||
List<TaskCellData> findByTaskId(@Param("taskId") int taskId);
|
||||
|
||||
@Select("SELECT id, task_id, table_name, data_id, cell_geohash " +
|
||||
"FROM task_cell_data " +
|
||||
"WHERE task_id = #{taskId} AND cell_geohash = #{cellGeohash}")
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "taskId", column = "task_id"),
|
||||
@Result(property = "tableName", column = "table_name"),
|
||||
@Result(property = "dataId", column = "data_id"),
|
||||
@Result(property = "cellGeohash", column = "cell_geohash")
|
||||
}
|
||||
)
|
||||
List<TaskCellData> findByTaskIdAndCellGeohash(@Param("taskId") int taskId , @Param("cellGeohash") String cellGeohash);
|
||||
|
||||
@Select("SELECT id, task_id, table_name, data_id, cell_geohash FROM task_cell_data WHERE task_id = #{taskId} AND cell_geohash = #{cellGeohash} and table_name = #{tableName}")
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "taskId", column = "task_id"),
|
||||
@Result(property = "tableName", column = "table_name"),
|
||||
@Result(property = "dataId", column = "data_id"),
|
||||
@Result(property = "cellGeohash", column = "cell_geohash")
|
||||
}
|
||||
)
|
||||
List<TaskCellData> findByTaskIdAndTableNameAndCellGeohash(@Param("taskId") int taskId , @Param("tableName") String tableName ,
|
||||
@Param("cellGeohash") String cellGeohash);
|
||||
|
||||
@Select("SELECT id, task_id, table_name, data_id, cell_geohash FROM task_cell_data WHERE task_id = #{taskId} AND table_name = #{tableName} AND data_id = #{dataId}")
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "taskId", column = "task_id"),
|
||||
@Result(property = "tableName", column = "table_name"),
|
||||
@Result(property = "dataId", column = "data_id"),
|
||||
@Result(property = "cellGeohash", column = "cell_geohash")
|
||||
}
|
||||
)
|
||||
TaskCellData findByTaskIdAndTableNameAndDataId(@Param("taskId") int taskId ,@Param("tableName") String tableName , @Param("dataId") long dataId);
|
||||
|
||||
@Select({"<script>",
|
||||
"SELECT id, task_id, table_name, data_id, cell_geohash",
|
||||
"FROM task_cell_data",
|
||||
"WHERE task_id = #{taskId} AND cell_geohash IN",
|
||||
"<foreach item='geohash' index='index' collection='geohashes'",
|
||||
"open='(' separator=',' close=')'>",
|
||||
"#{geohash}",
|
||||
"</foreach>",
|
||||
"</script>"})
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "taskId", column = "task_id"),
|
||||
@Result(property = "tableName", column = "table_name"),
|
||||
@Result(property = "dataId", column = "data_id"),
|
||||
@Result(property = "cellGeohash", column = "cell_geohash")
|
||||
}
|
||||
)
|
||||
List<TaskCellData> findByTaskIdAndCellGeohashIn(@Param("taskId") int taskId , @Param("geohashes") List<String> geohashes);
|
||||
|
||||
@Select({"<script>",
|
||||
"SELECT id, task_id, table_name, data_id, cell_geohash",
|
||||
"FROM task_cell_data",
|
||||
"WHERE task_id = #{taskId} AND data_id IN",
|
||||
"<foreach item='data' index='index' collection='dataIds'",
|
||||
"open='(' separator=',' close=')'>",
|
||||
"#{data}",
|
||||
"</foreach>",
|
||||
"</script>"})
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "taskId", column = "task_id"),
|
||||
@Result(property = "tableName", column = "table_name"),
|
||||
@Result(property = "dataId", column = "data_id"),
|
||||
@Result(property = "cellGeohash", column = "cell_geohash")
|
||||
}
|
||||
)
|
||||
List<TaskCellData> findByTaskIdAndDataIdIn(@Param("taskId") int taskId , @Param("dataIds") List<Integer> dataIds);
|
||||
|
||||
@Select("SELECT id, task_id, table_name, data_id, cell_geohash " +
|
||||
"FROM task_cell_data " +
|
||||
"WHERE task_id = #{taskId} AND data_id = #{dataId}")
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "taskId", column = "task_id"),
|
||||
@Result(property = "tableName", column = "table_name"),
|
||||
@Result(property = "dataId", column = "data_id"),
|
||||
@Result(property = "cellGeohash", column = "cell_geohash")
|
||||
}
|
||||
)
|
||||
TaskCellData findByTaskIdAndDataId(@Param("taskId") int taskId , @Param("dataId") int dataId);
|
||||
|
||||
@Select("INSERT INTO task_cell_data(task_id, table_name, data_id, cell_geohash)" +
|
||||
" VALUES(#{taskId}, #{tableName}, #{dataId}, #{cellGeohash}) RETURNING id")
|
||||
int insert(TaskCellData taskCellData);
|
||||
|
||||
@Insert({
|
||||
"<script>",
|
||||
"INSERT INTO task_cell_data(task_id, table_name, data_id, cell_geohash)",
|
||||
"VALUES" +
|
||||
"<foreach item='item' index='item' collection='list' open='' separator=',' close=''>" +
|
||||
"(" +
|
||||
"#{item.taskId}, #{item.tableName}, #{item.dataId}, #{item.cellGeohash}",
|
||||
")" +
|
||||
"</foreach>",
|
||||
"</script>"})
|
||||
void insertForeach(@Param("list") List<TaskCellData> list);
|
||||
|
||||
@Select("UPDATE task_cell_data SET task_id = #{taskId}, table_name = #{tableName}, data_id = #{dataId}, cell_geohash = #{cellGeohash} WHERE id = #{id} RETURNING id")
|
||||
@Options(flushCache = Options.FlushCachePolicy.TRUE)
|
||||
int update(TaskCellData taskCellData);
|
||||
|
||||
@Delete("DELETE FROM task_cell_data WHERE task_id = #{taskId}")
|
||||
void deleteByTaskId(@Param("taskId") int taskId);
|
||||
|
||||
@Delete("DELETE FROM task_cell_data WHERE task_id = #{taskId} AND table_name = #{tableName} AND data_id = #{dataId}")
|
||||
void deleteByTaskIdAndTableNameAndDataId(@Param("taskId") int taskId, @Param("tableName") String tableName, @Param("dataId") long dataId);
|
||||
|
||||
@Select(
|
||||
"SELECT table_name, data_id, cell_geohash " +
|
||||
"FROM task_cell_data " +
|
||||
"WHERE task_id = #{taskId} " +
|
||||
"AND cell_geohash = (SELECT cell_geohash FROM task_cell_data WHERE data_id = #{dataId})"
|
||||
)
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "tableName", column = "table_name"),
|
||||
@Result(property = "dataId", column = "data_id"),
|
||||
@Result(property = "cellGeohash", column = "cell_geohash")
|
||||
}
|
||||
)
|
||||
List<TaskCellData> findInTheSameTaskAndCell(@Param("taskId") int taskId, @Param("dataId") long dataId);
|
||||
|
||||
@Select({
|
||||
"<script>",
|
||||
"SELECT cell_geohash FROM task_cell_data ",
|
||||
"WHERE task_id = #{taskId} AND table_name = #{tableName} AND data_id IN ",
|
||||
"(<foreach item='dataId' collection='dataIds' separator=','>#{dataId}</foreach>)",
|
||||
"</script>"
|
||||
})
|
||||
List<String> findCellGeohashByTaskIdAndTableNameAndDataId(@Param("taskId") int taskId, @Param("tableName") String tableName, @Param("dataIds") List<Long> dataIds);
|
||||
|
||||
@Select({
|
||||
"<script>",
|
||||
"SELECT cell_geohash FROM task_cell_data WHERE task_id = #{taskId} AND table_name = #{tableName} " +
|
||||
"AND data_id IN (<foreach item='dataId' collection='dataIds' separator=','>#{dataId}</foreach>) " +
|
||||
"AND cell_geohash NOT IN " +
|
||||
"(SELECT tuc.cell_geohash FROM task_user_cell tuc WHERE tuc.task_id = #{taskId} AND tuc.user_id = #{userId})",
|
||||
"</script>"
|
||||
})
|
||||
List<String> findCellsWhereUserIsAbsent(@Param("taskId") int taskId, @Param("tableName") String table, @Param("userId") Integer reviewerId, @Param("dataIds") List<Long> dataIds);
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package cn.edu.whu.boot.allocation.mapper;
|
||||
|
||||
import cn.edu.whu.boot.allocation.entities.TaskCell;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Repository
|
||||
public interface TaskCellMapper {
|
||||
@Select("SELECT * FROM task_cell WHERE task_id = #{taskId}")
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "taskId", column = "task_id")
|
||||
}
|
||||
)
|
||||
List<TaskCell> findByTaskId(@Param("taskId") int taskId);
|
||||
|
||||
@Select("SELECT a.geojson FROM task_cell AS a WHERE a.geohash IN " +
|
||||
"(SELECT DISTINCT b.cell_geohash FROM task_user_cell AS b " +
|
||||
"WHERE b.task_id = #{taskId} AND b.user_id = #{userId})")
|
||||
List<String> findGeojsonByTaskIdAndUserId(@Param("taskId") int taskId, @Param("userId") int userId);
|
||||
|
||||
@Select("SELECT geojson FROM task_cell WHERE task_id = #{taskId} AND geohash = #{geohash}")
|
||||
String findGeojsonByTaskIdAndGeohash(@Param("taskId") int taskId, @Param("geohash") String geohash);
|
||||
|
||||
@Insert({
|
||||
"<script>",
|
||||
"INSERT INTO task_cell(task_id, geohash, geojson)",
|
||||
"VALUES" +
|
||||
"<foreach item='item' index='item' collection='list' open='' separator=',' close=''>" +
|
||||
"(" +
|
||||
"#{item.taskId}, #{item.geohash}, #{item.geojson}",
|
||||
")" +
|
||||
"</foreach>",
|
||||
"</script>"})
|
||||
void insertForeach(@Param("list") List<TaskCell> list);
|
||||
|
||||
@Insert("INSERT INTO task_cell(task_id, geohash, geojson) VALUES(#{taskId}, #{geohash}, #{geojson})")
|
||||
void insert(TaskCell taskCell);
|
||||
|
||||
@Delete("DELETE FROM task_cell WHERE task_id = #{taskId}")
|
||||
void deleteByTaskId(@Param("taskId") int taskId);
|
||||
|
||||
@Select("SELECT min(st_xmin(st_geomfromgeohash(substring(geohash, 1, length(geohash) - 12), 4490))) as xmin," +
|
||||
" max(st_xmax(st_geomfromgeohash(substring(geohash, 1, length(geohash) - 12), 4490))) as xmax, " +
|
||||
" min(st_ymin(st_geomfromgeohash(substring(geohash, 1, length(geohash) - 12), 4490))) as ymin, " +
|
||||
" max(st_ymax(st_geomfromgeohash(substring(geohash, 1, length(geohash) - 12), 4490))) as ymax " +
|
||||
" FROM task_cell WHERE task_id = #{taskId}")
|
||||
Map<String,Object> getCoordinateRange(@Param("taskId") Integer taskId);
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
package cn.edu.whu.boot.allocation.mapper;
|
||||
|
||||
import cn.edu.whu.boot.allocation.controllers.dtos.Worker;
|
||||
import cn.edu.whu.boot.allocation.entities.TaskUserCell;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface TaskUserCellMapper {
|
||||
@Select("SELECT id, task_id, user_id, cell_geohash " +
|
||||
"FROM task_user_cell " +
|
||||
"WHERE id = #{id}")
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "taskId", column = "task_id"),
|
||||
@Result(property = "userId", column = "user_id"),
|
||||
@Result(property = "cellGeohash", column = "cell_geohash")
|
||||
}
|
||||
)
|
||||
TaskUserCell findById(@Param("id") int id);
|
||||
|
||||
@Select("SELECT id, task_id, user_id, cell_geohash " +
|
||||
"FROM task_user_cell " +
|
||||
"WHERE task_id = #{taskId} AND user_id = #{userId}")
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "taskId", column = "task_id"),
|
||||
@Result(property = "userId", column = "user_id"),
|
||||
@Result(property = "cellGeohash", column = "cell_geohash")
|
||||
}
|
||||
)
|
||||
List<TaskUserCell> findByTaskIdAndUserId(@Param("taskId") int taskId, @Param("userId") int userId);
|
||||
|
||||
@Select("SELECT tmp.id AS user_id, tmp.real_name, tmp.work_role, tuc.cell_geohash\n" +
|
||||
"FROM task_user_cell tuc\n" +
|
||||
" INNER JOIN (SELECT tur.work_role, us.id, us.real_name\n" +
|
||||
" FROM task_user_role tur\n" +
|
||||
" INNER JOIN user_staff us ON tur.user_id = us.id\n" +
|
||||
" WHERE tur.task_id = #{taskId}) tmp ON tuc.user_id = tmp.id\n" +
|
||||
"WHERE tuc.task_id = #{taskId}")
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "id", column = "user_id"),
|
||||
@Result(property = "username", column = "real_name"),
|
||||
@Result(property = "geohash", column = "cell_geohash"),
|
||||
@Result(property = "role", column = "work_role")
|
||||
}
|
||||
)
|
||||
List<Worker> findCellAndUserByTaskId(@Param("taskId") int taskId);
|
||||
|
||||
@Select("SELECT a.user_id, a.cell_geohash, b.username, c.geojson, d.work_role " +
|
||||
"FROM task_user_cell AS a, user_staff AS b, task_cell AS c, task_user_role as d " +
|
||||
"WHERE a.task_id = #{taskId} AND a.user_id = #{userId} " +
|
||||
"AND a.user_id = b.id AND a.task_id = c.task_id AND a.cell_geohash = c.geohash " +
|
||||
"AND d.task_id = a.task_id AND d.user_id = a.user_id")
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "id", column = "user_id"),
|
||||
@Result(property = "username", column = "username"),
|
||||
@Result(property = "geohash", column = "cell_geohash"),
|
||||
@Result(property = "geojson", column = "geojson"),
|
||||
@Result(property = "role", column = "work_role")
|
||||
}
|
||||
)
|
||||
List<Worker> findCellAndUserByTaskIdAndUserId(@Param("taskId") int taskId, @Param("userId") int userId);
|
||||
|
||||
@Select("SELECT id, task_id, user_id, cell_geohash " +
|
||||
"FROM task_user_cell " +
|
||||
"WHERE task_id = #{taskId} AND user_id = #{userId} AND cell_geohash = #{geohash}")
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "taskId", column = "task_id"),
|
||||
@Result(property = "userId", column = "user_id"),
|
||||
@Result(property = "cellGeohash", column = "cell_geohash")
|
||||
}
|
||||
)
|
||||
TaskUserCell findByTaskIdAndUserIdAndCellGeohash(@Param("taskId") int taskId, @Param("userId") int userId, @Param("geohash") String geohash);
|
||||
|
||||
@Select("SELECT count(id) FROM task_user_cell WHERE task_id = #{taskId} AND user_id = #{userId}")
|
||||
int countByTaskIdAndUserId(@Param("taskId") int taskId, @Param("userId") int userId);
|
||||
|
||||
@Select("INSERT INTO task_user_cell(task_id, user_id, cell_geohash)" +
|
||||
" VALUES(#{taskId}, #{userId}, #{cellGeohash}) " +
|
||||
"RETURNING id")
|
||||
int insert(TaskUserCell taskUserCell);
|
||||
|
||||
@Insert({
|
||||
"<script>",
|
||||
"INSERT INTO task_user_cell(task_id, user_id, cell_geohash)",
|
||||
"VALUES" +
|
||||
"<foreach item='item' index='item' collection='list' open='' separator=',' close=''>" +
|
||||
"(" +
|
||||
"#{item.taskId}, #{item.userId}, #{item.cellGeohash}",
|
||||
")" +
|
||||
"</foreach>",
|
||||
"</script>"})
|
||||
void insertForeach(@Param("list") List<TaskUserCell> list);
|
||||
|
||||
@Select("WITH rows AS (" +
|
||||
"UPDATE task_user_cell " +
|
||||
"SET user_id = #{userId}" +
|
||||
" WHERE task_id = #{taskId} AND cell_geohash = #{cellGeohash} " +
|
||||
"RETURNING 1" +
|
||||
") SELECT count(*) FROM rows")
|
||||
int updateUserIdByTaskIdAndCellGeohash(@Param("taskId") int taskId, @Param("cellGeohash") String cellGeohash, @Param("userId") int userId);
|
||||
|
||||
@Delete("DELETE FROM task_user_cell WHERE task_id = #{taskId}")
|
||||
void deleteByTaskId(@Param("taskId") int taskId);
|
||||
|
||||
@Delete("DELETE FROM task_user_cell WHERE task_id = #{taskId} AND user_id = #{userId}")
|
||||
void deleteByTaskIdAndUserId(@Param("taskId") int taskId, @Param("userId") int userId);
|
||||
|
||||
@Delete("DELETE FROM task_user_cell WHERE task_id = #{taskId} AND cell_geohash = #{geohash} AND user_id = #{userId}")
|
||||
void deleteByTaskIdAndCellGeohashAndUserId(@Param("taskId") int taskId,@Param("geohash") String geohash, @Param("userId") int userId);
|
||||
|
||||
@Delete("DELETE FROM task_user_cell WHERE task_id = #{taskId} AND cell_geohash = #{geohash}")
|
||||
void deleteByTaskIdAndCellGeohash(@Param("taskId") int taskId, @Param("geohash") String geohash);
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
package cn.edu.whu.boot.allocation.mapper;
|
||||
|
||||
import cn.edu.whu.boot.allocation.controllers.dtos.Worker;
|
||||
import cn.edu.whu.boot.allocation.entities.TaskUserRole;
|
||||
import org.apache.ibatis.annotations.*;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface TaskUserRoleMapper {
|
||||
@Select("SELECT id, task_id, user_id, work_role FROM task_user_role WHERE id = #{id}")
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "taskId", column = "task_id"),
|
||||
@Result(property = "userId", column = "user_id"),
|
||||
@Result(property = "workRole", column = "work_role")
|
||||
}
|
||||
)
|
||||
TaskUserRole findById(int id);
|
||||
|
||||
@Select("SELECT id, task_id, user_id, work_role FROM task_user_role WHERE task_id = #{taskId}")
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "taskId", column = "task_id"),
|
||||
@Result(property = "userId", column = "user_id"),
|
||||
@Result(property = "workRole", column = "work_role")
|
||||
}
|
||||
)
|
||||
List<TaskUserRole> findByTaskId(@Param("taskId") int taskId);
|
||||
|
||||
@Select("SELECT id, task_id, user_id, work_role FROM task_user_role WHERE user_id = #{userId}")
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "taskId", column = "task_id"),
|
||||
@Result(property = "userId", column = "user_id"),
|
||||
@Result(property = "workRole", column = "work_role")
|
||||
}
|
||||
)
|
||||
List<TaskUserRole> findByUserId(@Param("userId") int userId);
|
||||
|
||||
@Select("SELECT a.id, a.real_name, b.work_role " +
|
||||
"FROM user_staff AS a, task_user_role AS b " +
|
||||
"WHERE b.task_id = #{taskId} AND a.id = b.user_id")
|
||||
@Results(
|
||||
{
|
||||
@Result(property = "id", column = "id"),
|
||||
@Result(property = "username", column = "real_name"),
|
||||
@Result(property = "role", column = "work_role")
|
||||
}
|
||||
)
|
||||
List<Worker> findWorkerByTaskId(@Param("taskId") int taskId);
|
||||
|
||||
@Select("SELECT work_role FROM task_user_role WHERE task_id = #{taskId} AND user_id = #{userId}")
|
||||
Integer findWorkRoleByTaskIdAndUserId(@Param("taskId") int taskId, @Param("userId") int userId);
|
||||
|
||||
@Insert("INSERT INTO task_user_role(task_id, user_id, work_role)" +
|
||||
" VALUES(#{taskId}, #{userId}, #{workRole})" +
|
||||
" ON CONFLICT (task_id, user_id) DO NOTHING")
|
||||
void insert(TaskUserRole taskUserRole);
|
||||
|
||||
@Insert({
|
||||
"<script>",
|
||||
"INSERT INTO task_user_role(task_id, user_id, work_role)",
|
||||
"VALUES" +
|
||||
"<foreach item='item' index='item' collection='list' open='' separator=',' close=''>" +
|
||||
"(" +
|
||||
"#{item.taskId}, #{item.userId}, #{item.workRole}",
|
||||
")" +
|
||||
"</foreach> " +
|
||||
"ON CONFLICT (task_id, user_id) DO NOTHING",
|
||||
"</script>"})
|
||||
void insertForeach(@Param("list") List<TaskUserRole> list);
|
||||
|
||||
@Select("UPDATE task_user_role SET task_id = #{taskId}, user_id = #{userId}, work_role = #{workRole} RETURNING id")
|
||||
@Options(flushCache = Options.FlushCachePolicy.TRUE)
|
||||
int update(TaskUserRole taskUserRole);
|
||||
|
||||
@Select("SELECT user_id FROM task_user_role WHERE task_id = #{taskId};")
|
||||
List<Integer> getUserIdByTaskId(@Param("taskId") int taskId);
|
||||
|
||||
@Delete("DELETE FROM task_user_role WHERE task_id = #{taskId}")
|
||||
void deleteByTaskId(@Param("taskId") int taskId);
|
||||
|
||||
@Delete("DELETE FROM task_user_role WHERE task_id = #{taskId} AND user_id = #{userId}")
|
||||
void deleteByTaskIdAndUserId(@Param("taskId") int taskId, @Param("userId") int userId);
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package cn.edu.whu.boot.allocation.services;
|
||||
|
||||
import cn.edu.whu.boot.allocation.entities.Draft;
|
||||
|
||||
public interface DraftService {
|
||||
|
||||
int insert(String databaseName , Draft draft);
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package cn.edu.whu.boot.allocation.services;
|
||||
|
||||
|
||||
import cn.edu.whu.boot.allocation.entities.Image;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface ImageService {
|
||||
Optional<String> findFilenameById(int id);
|
||||
|
||||
int countByFilename(String filename);
|
||||
|
||||
List<String> findFilenamesInIds(List<Integer> ids);
|
||||
|
||||
List<Image> findByTaskId(int taskId);
|
||||
|
||||
int countByTaskId(int taskId);
|
||||
|
||||
List<Map<String, Object>> findByTaskIdPaginated(int taskId, int page, int count);
|
||||
|
||||
int insert(Image image);
|
||||
|
||||
void deleteInIds(List<Integer> ids);
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package cn.edu.whu.boot.allocation.services;
|
||||
|
||||
|
||||
import cn.edu.whu.boot.allocation.entities.RouteLine;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface RouteLineService {
|
||||
|
||||
void insertRouteLine(String databaseName, RouteLine routeLine);
|
||||
|
||||
List<RouteLine> findByName(String databaseName, String name);
|
||||
|
||||
List<RouteLine> findByNameAndTime(String databaseName, String name, String beginTime, String stopTime);
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package cn.edu.whu.boot.allocation.services;
|
||||
|
||||
|
||||
import cn.edu.whu.boot.allocation.entities.TaskCellData;
|
||||
import cn.edu.whu.boot.xml.domain.Task;
|
||||
import cn.edu.whu.boot.xml.xmlreader.bean.Table;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface TaskCellDataService {
|
||||
Optional<TaskCellData> findById(int id);
|
||||
|
||||
List<TaskCellData> findByTaskId(int taskId);
|
||||
|
||||
List<TaskCellData> findByTaskIdAndGeohash(int taskId , String cellGeohash);
|
||||
|
||||
List<TaskCellData> findByTaskIdAndTableNameAndGeohash(int taskId , String tableName, String cellGeohash);
|
||||
|
||||
Optional<TaskCellData> findByTaskIdAndTableNameAndDataId(int taskId , String tableName , long dataId);
|
||||
|
||||
List<TaskCellData> findByTaskIdAndCellGeohashIn(int taskId , List<String> cellGeohashes);
|
||||
|
||||
int insert(TaskCellData taskCellData);
|
||||
|
||||
void insertList(List<TaskCellData> taskCellDataList);
|
||||
|
||||
void deleteByTaskId(int taskId);
|
||||
|
||||
List<TaskCellData> findTaskDataInTheSameCell(int taskId, long dataId);
|
||||
|
||||
List<String> findCellGeohashByData(int taskId, String tableName, List<Long> dataIds);
|
||||
|
||||
void updateAfterDataCreatedOrUpdated(Task task, Table table, long dataId);
|
||||
|
||||
List<String> findCellsWhereUserIsAbsent(int taskId, String table, Integer reviewerId, List<Long> dataIds);
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package cn.edu.whu.boot.allocation.services;
|
||||
|
||||
import cn.edu.whu.boot.allocation.entities.TaskCell;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface TaskCellService {
|
||||
List<TaskCell> findByTaskId(int taskId);
|
||||
|
||||
List<String> findGeojsonByTaskIdAndUserId(int taskId, int userId);
|
||||
|
||||
Optional<String> findGeojsonByTaskIdAndGeohash(int taskId, String geohash);
|
||||
|
||||
void insertList(List<TaskCell> list);
|
||||
|
||||
void deleteByTaskId(int taskId);
|
||||
|
||||
Map<String,Object> getCoordinateRange(Integer taskId);
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package cn.edu.whu.boot.allocation.services;
|
||||
|
||||
import cn.edu.whu.boot.allocation.entities.TaskCell;
|
||||
import cn.edu.whu.boot.allocation.entities.TaskCellData;
|
||||
import cn.edu.whu.boot.allocation.entities.TaskUserCell;
|
||||
import cn.edu.whu.boot.allocation.entities.TaskUserRole;
|
||||
import cn.edu.whu.boot.xml.domain.Task;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface TaskInfoService {
|
||||
/**
|
||||
* 分配任务时在数据库中更新相关的信息
|
||||
*
|
||||
* @param cellToData 网格-数据的对应关系
|
||||
* @param taskCells 网格的信息
|
||||
* @param taskUserCell 外业人员-网格的对应关系
|
||||
* @param taskUserRole 外业人员-工作角色的对应关系
|
||||
* @param task 任务
|
||||
* @param assignedData 审核人员-数据的对应关系
|
||||
*/
|
||||
boolean updateTaskInfo(List<TaskCellData> cellToData,
|
||||
List<TaskCell> taskCells,
|
||||
List<TaskUserCell> taskUserCell,
|
||||
List<TaskUserRole> taskUserRole,
|
||||
Task task,
|
||||
Map<String, Map<Long, Integer>> assignedData);
|
||||
|
||||
/**
|
||||
* 修改数据对应的巡查人员
|
||||
*
|
||||
* @param taskId 任务 ID
|
||||
* @param dataToWorker 数据和外业人员的对应关系
|
||||
*/
|
||||
void updateCell2WorkerAndData2Worker(int taskId,
|
||||
Map<String, Map<Long, Integer>> dataToWorker) throws Exception;
|
||||
|
||||
/**
|
||||
* 交换网格后更新数据库
|
||||
*/
|
||||
void updateCell2WorkerAndData2Worker(int taskId,
|
||||
Map<String, Integer> cellToWorker,
|
||||
Map<String, Map<Long, Integer>> dataToWorker) throws Exception;
|
||||
|
||||
/**
|
||||
* 从任务中移除外业人员后更新 task_user_cell 和 tasK_user_role
|
||||
*
|
||||
* @param taskId 任务 ID
|
||||
* @param userId 需要移除的外业人员的 ID
|
||||
* @param isReviewer 是否为审核人员
|
||||
*/
|
||||
void updateUser2RoleAndUser2CellAndUser2Data(int taskId, int userId, boolean isReviewer) throws Exception;
|
||||
|
||||
/**
|
||||
* 从网格中删除人员后更新 task_user_cell,
|
||||
* 如果是审核人员,还要更新数据-人员
|
||||
*
|
||||
* @param taskId 任务 ID
|
||||
* @param geohash 网格
|
||||
* @param userId 采集人员 ID
|
||||
* @param isInspector 是否为审核人员
|
||||
*/
|
||||
boolean updateUser2RoleAndUser2CellAndUser2Data(int taskId, String geohash, int userId, boolean isInspector) throws Exception;
|
||||
|
||||
/**
|
||||
* 删除任务相关的数据
|
||||
*
|
||||
* @param taskId 任务 ID
|
||||
*/
|
||||
void deleteTaskInfo(int taskId);
|
||||
|
||||
/**
|
||||
* 修改网格内的工作人员后更新数据库
|
||||
*/
|
||||
void completeChangingWorkersInCell(int taskId, String geohash, Collection<Integer> userIds, Map<String, Map<Long, Integer>> assignedData) throws Exception;
|
||||
|
||||
/**
|
||||
* 修改任务的外业人员队伍后更新数据库
|
||||
*/
|
||||
void completeChangingWorkers(int taskId,
|
||||
Map<Integer, Integer> appendWorker2role,
|
||||
Map<Integer, Integer> deleteWorker2role) throws Exception;
|
||||
|
||||
/**
|
||||
* 设置任务是否需要分配
|
||||
*/
|
||||
void setTaskAllocationOptional(int taskId, boolean optional);
|
||||
|
||||
boolean isTaskAllocationOptional(int taskId);
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package cn.edu.whu.boot.allocation.services;
|
||||
|
||||
|
||||
import cn.edu.whu.boot.allocation.controllers.dtos.Worker;
|
||||
import cn.edu.whu.boot.allocation.entities.TaskUserCell;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface TaskUserCellService {
|
||||
Optional<TaskUserCell> findById(int id);
|
||||
|
||||
List<TaskUserCell> findByTaskIdAndUserId(int taskId, int userId);
|
||||
|
||||
List<Worker> findWorkerByTaskId(int taskId);
|
||||
|
||||
List<Worker> findWorkerByTaskIdAndUserId(int taskId, int userId);
|
||||
|
||||
Optional<TaskUserCell> findByTaskIdAndUserIdAndCellGeohash(int taskId, int userId, String geohash);
|
||||
|
||||
int countByTaskIdAndUserId(int taskId, int userId);
|
||||
|
||||
int insert(TaskUserCell taskUserCell);
|
||||
|
||||
void insertList(List<TaskUserCell> list);
|
||||
|
||||
void updateUserIdByTaskIdAndCellGeohash(int taskId, Map<String, Integer> cellToWorker) throws Exception;
|
||||
|
||||
void deleteByTaskId(int taskId);
|
||||
|
||||
void deleteByTaskIdAndUserId(int taskId, int userId);
|
||||
|
||||
void deleteByTaskIdAndCellGeohashAndUserId(int taskId, String geohash, int userId);
|
||||
|
||||
void deleteByTaskIdAndCellGeohash(int taskId, String geohash);
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package cn.edu.whu.boot.allocation.services;
|
||||
|
||||
|
||||
import cn.edu.whu.boot.allocation.controllers.dtos.Worker;
|
||||
import cn.edu.whu.boot.allocation.entities.TaskUserRole;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface TaskUserRoleService {
|
||||
|
||||
TaskUserRole findById(int id);
|
||||
|
||||
List<TaskUserRole> findByTaskId(int taskId);
|
||||
|
||||
List<TaskUserRole> findByUserId(int userId);
|
||||
|
||||
List<Worker> findWorkerByTaskId(int taskId);
|
||||
|
||||
Optional<Integer> findWorkRoleByTaskIdAndUserId(int taskId, int userId);
|
||||
|
||||
void insertList(List<TaskUserRole> list);
|
||||
|
||||
TaskUserRole update(TaskUserRole taskUserRole);
|
||||
|
||||
/**
|
||||
* 在task_user_role表中获取某任务下的所有工作人员的userId
|
||||
*/
|
||||
List<Integer> getUserIdByTaskId(int taskId);
|
||||
|
||||
void deleteByTaskId(int taskId);
|
||||
|
||||
void deleteByTaskIdAndUserId(int taskId, int userId);
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package cn.edu.whu.boot.allocation.services.impl;
|
||||
|
||||
import cn.edu.whu.boot.allocation.entities.Draft;
|
||||
import cn.edu.whu.boot.allocation.mapper.DraftMapper;
|
||||
import cn.edu.whu.boot.allocation.services.DraftService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class DraftServiceImpl implements DraftService {
|
||||
|
||||
private final DraftMapper draftMapper;
|
||||
|
||||
public DraftServiceImpl(DraftMapper draftMapper) {
|
||||
this.draftMapper = draftMapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int insert(String databaseName, Draft draft) {
|
||||
return draftMapper.insert(databaseName, draft);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package cn.edu.whu.boot.allocation.services.impl;
|
||||
|
||||
import cn.edu.whu.boot.allocation.entities.Image;
|
||||
import cn.edu.whu.boot.allocation.mapper.ImageMapper;
|
||||
import cn.edu.whu.boot.allocation.services.ImageService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
@Service
|
||||
public class ImageServiceImpl implements ImageService {
|
||||
|
||||
private final ImageMapper imageMapper;
|
||||
|
||||
public ImageServiceImpl(ImageMapper imageMapper) {
|
||||
this.imageMapper = imageMapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<String> findFilenameById(int id) {
|
||||
return Optional.ofNullable(imageMapper.findFilenameById(id));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int countByFilename(String filename)
|
||||
{
|
||||
return imageMapper.countByFilename(filename);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> findFilenamesInIds(List<Integer> ids) {
|
||||
return imageMapper.findFilenamesByIds(ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Image> findByTaskId(int taskId) {
|
||||
return imageMapper.findByTaskId(taskId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int countByTaskId(int taskId) {
|
||||
return imageMapper.countByTaskId(taskId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<String, Object>> findByTaskIdPaginated(int taskId, int page, int count) {
|
||||
return imageMapper.findByTaskIdPaginated(taskId, page, count);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int insert(Image image) {
|
||||
return imageMapper.insert(image);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteInIds(List<Integer> ids) {
|
||||
imageMapper.deleteInIds(ids);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package cn.edu.whu.boot.allocation.services.impl;
|
||||
|
||||
import cn.edu.whu.boot.allocation.entities.RouteLine;
|
||||
import cn.edu.whu.boot.allocation.mapper.RouteLineMapper;
|
||||
import cn.edu.whu.boot.allocation.services.RouteLineService;
|
||||
import cn.edu.whu.boot.common.utils.collection.OtherUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class RouteLineServiceImpl implements RouteLineService {
|
||||
|
||||
private final RouteLineMapper routeLineMapper;
|
||||
|
||||
public RouteLineServiceImpl(RouteLineMapper routeLineMapper) {
|
||||
this.routeLineMapper = routeLineMapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
|
||||
public void insertRouteLine(String databaseName, RouteLine routeLine) {
|
||||
routeLine.setBegindate(OtherUtil.changeTimeString(routeLine.getBegindate()));
|
||||
routeLine.setStopdate(OtherUtil.changeTimeString(routeLine.getStopdate()));
|
||||
routeLine.setPrimaryKeySeq("\'" + databaseName + ".route_line_id_seq" + "\'");
|
||||
routeLineMapper.insert(databaseName, routeLine);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RouteLine> findByName(String databaseName , String name)
|
||||
{
|
||||
return routeLineMapper.findByName(databaseName, name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RouteLine> findByNameAndTime(String databaseName , String name, String beginTime, String stopTime)
|
||||
{
|
||||
return routeLineMapper.findByNameAndTime(databaseName, name, beginTime, stopTime);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,165 @@
|
||||
package cn.edu.whu.boot.allocation.services.impl;
|
||||
|
||||
import cn.edu.whu.boot.allocation.entities.TaskCell;
|
||||
import cn.edu.whu.boot.allocation.entities.TaskCellData;
|
||||
import cn.edu.whu.boot.allocation.mapper.TaskCellDataMapper;
|
||||
import cn.edu.whu.boot.allocation.services.TaskCellDataService;
|
||||
import cn.edu.whu.boot.allocation.services.TaskCellService;
|
||||
import cn.edu.whu.boot.common.utils.allocation.ArcGisGeoJsonParser;
|
||||
import cn.edu.whu.boot.xml.domain.Task;
|
||||
import cn.edu.whu.boot.xml.xmlreader.bean.Field;
|
||||
import cn.edu.whu.boot.xml.xmlreader.bean.Table;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import org.apache.ibatis.session.ExecutorType;
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import org.locationtech.jts.geom.Coordinate;
|
||||
import org.locationtech.jts.geom.Geometry;
|
||||
import org.locationtech.jts.geom.GeometryFactory;
|
||||
import org.locationtech.jts.geom.Polygon;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class TaskCellDataServiceImpl implements TaskCellDataService {
|
||||
|
||||
@Autowired
|
||||
private TaskCellService taskCellService;
|
||||
|
||||
@Autowired
|
||||
private TaskCellDataMapper taskCellDataMapper;
|
||||
|
||||
@Autowired
|
||||
private SqlSessionFactory sqlSessionFactory;
|
||||
|
||||
@Override
|
||||
public Optional<TaskCellData> findById(int id) {
|
||||
return Optional.ofNullable(taskCellDataMapper.findById(id));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskCellData> findByTaskId(int taskId) {
|
||||
return taskCellDataMapper.findByTaskId(taskId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskCellData> findByTaskIdAndGeohash(int taskId, String cellGeohash) {
|
||||
return taskCellDataMapper.findByTaskIdAndCellGeohash(taskId, cellGeohash);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskCellData> findByTaskIdAndTableNameAndGeohash(int taskId, String tableName, String cellGeohash) {
|
||||
return taskCellDataMapper.findByTaskIdAndTableNameAndCellGeohash(taskId, tableName, cellGeohash);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<TaskCellData> findByTaskIdAndTableNameAndDataId(int taskId, String tableName, long dataId) {
|
||||
return Optional.ofNullable(taskCellDataMapper.findByTaskIdAndTableNameAndDataId(taskId, tableName, dataId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskCellData> findByTaskIdAndCellGeohashIn(int taskId, List<String> cellGeohashes) {
|
||||
return taskCellDataMapper.findByTaskIdAndCellGeohashIn(taskId, cellGeohashes);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public int insert(TaskCellData taskCellData) {
|
||||
return taskCellDataMapper.insert(taskCellData);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void insertList(List<TaskCellData> taskCellDataList) {
|
||||
if (taskCellDataList == null || taskCellDataList.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
if (taskCellDataList.size() * 4 <= 2000) {
|
||||
// 参数个数不大于 2000,用 MyBatis foreach 插入
|
||||
taskCellDataMapper.insertForeach(taskCellDataList);
|
||||
} else {
|
||||
try (SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH)) {
|
||||
TaskCellDataMapper mapper = session.getMapper(TaskCellDataMapper.class);
|
||||
taskCellDataList.forEach(mapper::insert);
|
||||
session.commit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteByTaskId(int taskId) {
|
||||
taskCellDataMapper.deleteByTaskId(taskId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskCellData> findTaskDataInTheSameCell(int taskId, long dataId) {
|
||||
return taskCellDataMapper.findInTheSameTaskAndCell(taskId, dataId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> findCellGeohashByData(int taskId, String tableName, List<Long> dataIds) {
|
||||
return dataIds == null || dataIds.isEmpty() ? Collections.emptyList() : taskCellDataMapper.findCellGeohashByTaskIdAndTableNameAndDataId(taskId, tableName, dataIds);
|
||||
}
|
||||
|
||||
private static final GeometryFactory geometryFactory = new GeometryFactory();
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateAfterDataCreatedOrUpdated(Task task, Table table, long dataId) {
|
||||
if (task.getIsAllocationOptional() == 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
Optional<Geometry> optional = table
|
||||
.getFields()
|
||||
.values()
|
||||
.stream()
|
||||
.filter(Field::isGeometry)
|
||||
.findFirst()
|
||||
.map(f -> ArcGisGeoJsonParser.toGeometryObject(new String(Base64.getDecoder().decode(f.getValue().toString()))));
|
||||
if (!optional.isPresent()) {
|
||||
return;
|
||||
}
|
||||
Geometry data = optional.get();
|
||||
|
||||
// 获取所有和数据相交的网格
|
||||
int taskId = task.getId();
|
||||
List<TaskCell> cells = taskCellService.findByTaskId(taskId);
|
||||
if (cells.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
String tableName = table.getKey();
|
||||
List<TaskCellData> taskCellData = cells
|
||||
.stream()
|
||||
.map(cell -> {
|
||||
JSONArray jsonArray = JSON.parseObject(cell.getGeojson()).getJSONObject("geometry").getJSONArray("coordinates").getJSONArray(0);
|
||||
Coordinate[] coordinates = new Coordinate[jsonArray.size()];
|
||||
for (int i = 0; i < jsonArray.size(); i++) {
|
||||
JSONArray coord = jsonArray.getJSONArray(i);
|
||||
coordinates[i] = new Coordinate(coord.getDouble(0), coord.getDouble(1));
|
||||
}
|
||||
Polygon polygon = geometryFactory.createPolygon(coordinates);
|
||||
polygon.setUserData(cell.getGeohash());
|
||||
return polygon;
|
||||
})
|
||||
.filter(cell -> cell.intersects(data))
|
||||
.map(cell -> new TaskCellData(taskId, tableName, dataId, (String) cell.getUserData()))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
taskCellDataMapper.deleteByTaskIdAndTableNameAndDataId(taskId, tableName, dataId);
|
||||
if (!taskCellData.isEmpty()) {
|
||||
taskCellDataMapper.insertForeach(taskCellData);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> findCellsWhereUserIsAbsent(int taskId, String table, Integer reviewerId, List<Long> dataIds) {
|
||||
return dataIds == null || dataIds.isEmpty() ? Collections.emptyList() : taskCellDataMapper.findCellsWhereUserIsAbsent(taskId, table, reviewerId, dataIds);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package cn.edu.whu.boot.allocation.services.impl;
|
||||
|
||||
import cn.edu.whu.boot.allocation.entities.TaskCell;
|
||||
import cn.edu.whu.boot.allocation.mapper.TaskCellMapper;
|
||||
import cn.edu.whu.boot.allocation.services.TaskCellService;
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
@Service
|
||||
public class TaskCellServiceImpl implements TaskCellService {
|
||||
|
||||
private final TaskCellMapper taskCellMapper;
|
||||
|
||||
@Autowired
|
||||
private SqlSessionFactory sqlSessionFactory;
|
||||
|
||||
public TaskCellServiceImpl(TaskCellMapper taskCellMapper) {
|
||||
this.taskCellMapper = taskCellMapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskCell> findByTaskId(int taskId) {
|
||||
return taskCellMapper.findByTaskId(taskId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> findGeojsonByTaskIdAndUserId(int taskId, int userId) {
|
||||
return taskCellMapper.findGeojsonByTaskIdAndUserId(taskId, userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<String> findGeojsonByTaskIdAndGeohash(int taskId, String geohash) {
|
||||
return Optional.ofNullable(taskCellMapper.findGeojsonByTaskIdAndGeohash(taskId, geohash));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void insertList(List<TaskCell> list) {
|
||||
if (list != null && !list.isEmpty()) {
|
||||
taskCellMapper.insertForeach(list);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteByTaskId(int taskId) {
|
||||
taskCellMapper.deleteByTaskId(taskId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> getCoordinateRange(Integer taskId)
|
||||
{
|
||||
return taskCellMapper.getCoordinateRange(taskId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,300 @@
|
||||
package cn.edu.whu.boot.allocation.services.impl;
|
||||
|
||||
import cn.edu.whu.boot.allocation.entities.TaskCell;
|
||||
import cn.edu.whu.boot.allocation.entities.TaskCellData;
|
||||
import cn.edu.whu.boot.allocation.entities.TaskUserCell;
|
||||
import cn.edu.whu.boot.allocation.entities.TaskUserRole;
|
||||
import cn.edu.whu.boot.allocation.exceptions.InvalidAssignmentStatus;
|
||||
import cn.edu.whu.boot.allocation.mapper.SimpleTaskMapper;
|
||||
import cn.edu.whu.boot.allocation.services.*;
|
||||
import cn.edu.whu.boot.collection.service.IBaseService;
|
||||
import cn.edu.whu.boot.common.domain.CommonConstant;
|
||||
import cn.edu.whu.boot.common.service.CacheService;
|
||||
import cn.edu.whu.boot.common.utils.collection.PostgreSqlUtil;
|
||||
import cn.edu.whu.boot.common.utils.collection.TableOperationUtil;
|
||||
import cn.edu.whu.boot.xml.domain.RedisKeyType;
|
||||
import cn.edu.whu.boot.xml.domain.Task;
|
||||
import cn.edu.whu.boot.xml.service.ITaskService;
|
||||
import cn.edu.whu.boot.xml.xmlreader.bean.Config;
|
||||
import cn.edu.whu.boot.xml.xmlreader.bean.Table;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class TaskInfoServiceImpl implements TaskInfoService {
|
||||
|
||||
private final Logger log = LoggerFactory.getLogger(TaskInfoServiceImpl.class);
|
||||
|
||||
@Autowired
|
||||
private TaskCellDataService taskCellDataService;
|
||||
|
||||
@Autowired
|
||||
private TaskCellService taskCellService;
|
||||
|
||||
@Autowired
|
||||
private TaskUserCellService taskUserCellService;
|
||||
|
||||
@Autowired
|
||||
private TaskUserRoleService taskUserRoleService;
|
||||
|
||||
@Autowired
|
||||
private IBaseService baseService;
|
||||
|
||||
@Autowired
|
||||
private ITaskService taskService;
|
||||
|
||||
@Autowired
|
||||
private SimpleTaskMapper taskMapper;
|
||||
|
||||
@Autowired
|
||||
private CacheService cacheService;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public boolean updateTaskInfo(List<TaskCellData> cellToData,
|
||||
List<TaskCell> taskCells,
|
||||
List<TaskUserCell> taskUserCell,
|
||||
List<TaskUserRole> taskUserRole,
|
||||
Task task,
|
||||
Map<String, Map<Long, Integer>> assignedData) {
|
||||
// 将数据-网格的对应关系保存到数据库
|
||||
taskCellDataService.insertList(cellToData);
|
||||
// 将网格的信息保存到数据库
|
||||
taskCellService.insertList(taskCells);
|
||||
// 将人员-网格的对应关系保存到数据库
|
||||
taskUserCellService.insertList(taskUserCell);
|
||||
// 将该任务中给个外业人员的具体角色保存到数据库中
|
||||
taskUserRoleService.insertList(taskUserRole);
|
||||
// 将数据-人员的对应关系保存到数据库
|
||||
if (task == null || assignedData == null || assignedData.isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
String updateReviewerResult = baseService.updateRootTableDataForReviewer(task, assignedData);
|
||||
if (!updateReviewerResult.equals("succeed")) {
|
||||
log.error("更新任务{}的数据-人员对应关系时发生异常", task.getId());
|
||||
return false;
|
||||
}
|
||||
|
||||
// 更新缓存
|
||||
cacheService.delete(RedisKeyType.TASK + String.valueOf(task.getId()));
|
||||
cacheService.delete(RedisKeyType.TASK + "all");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateCell2WorkerAndData2Worker(int taskId,
|
||||
Map<String, Map<Long, Integer>> tbToDataAndWorker) throws Exception {
|
||||
// 如果巡查人员之前在某个网格中没有任务,那么需要更新 task_user_cell
|
||||
List<TaskUserCell> taskUserCells = getNewTaskUserCells(taskId, tbToDataAndWorker);
|
||||
if (!taskUserCells.isEmpty()) {
|
||||
taskUserCellService.insertList(taskUserCells);
|
||||
}
|
||||
|
||||
// 更新数据-人员的对应关系
|
||||
String updateReviewerResult = baseService.updateRootTableDataForReviewer(taskService.getTaskById(taskId), tbToDataAndWorker);
|
||||
if (!updateReviewerResult.equals("succeed")) {
|
||||
throw new Exception(String.format("更新任务 %d 的数据-人员对应关系时发生异常", taskId));
|
||||
}
|
||||
|
||||
if (!taskUserCells.isEmpty()) {
|
||||
cacheService.delete(RedisKeyType.CELL.toString() + taskId);
|
||||
}
|
||||
}
|
||||
|
||||
private List<TaskUserCell> getNewTaskUserCells(int taskId, Map<String, Map<Long, Integer>> tbToDataAndWorker) throws InvalidAssignmentStatus {
|
||||
List<TaskUserCell> newTaskUserCells = new ArrayList<>(); // 需要往 task_user_cell 中插入的记录
|
||||
Set<Integer> validatedNewReviewers = new HashSet<>(); // 已经通过身份检查的新的巡查人员
|
||||
for (Map.Entry<String, Map<Long, Integer>> e1 : tbToDataAndWorker.entrySet()) {
|
||||
Map<Integer, List<Long>> reviewerToData = new HashMap<>(); // 每个巡查人员对应的数据
|
||||
String tableName = e1.getKey();
|
||||
for (Map.Entry<Long, Integer> e2 : e1.getValue().entrySet()) {
|
||||
long dataId = e2.getKey();
|
||||
int reviewerId = e2.getValue();
|
||||
if (validatedNewReviewers.add(reviewerId)) {
|
||||
// 检查该用户的身份是否合法
|
||||
Optional<Integer> optionalRole = taskUserRoleService.findWorkRoleByTaskIdAndUserId(taskId, reviewerId);
|
||||
if (!optionalRole.isPresent()) {
|
||||
throw new InvalidAssignmentStatus(String.format("人员 %d 不在 %d 号任务中", reviewerId, taskId));
|
||||
}
|
||||
if (optionalRole.get().equals(0)) {
|
||||
throw new InvalidAssignmentStatus(String.format("人员 %d 是采集人员,不能审核数据", reviewerId));
|
||||
}
|
||||
}
|
||||
reviewerToData.computeIfAbsent(reviewerId, k -> new ArrayList<>()).add(dataId);
|
||||
}
|
||||
|
||||
for (Map.Entry<Integer, List<Long>> e : reviewerToData.entrySet()) {
|
||||
List<Long> dataIds = e.getValue();
|
||||
Integer reviewerId = e.getKey();
|
||||
List<String> geohash = taskCellDataService.findCellsWhereUserIsAbsent(taskId, tableName, reviewerId, dataIds);
|
||||
if (geohash != null) {
|
||||
geohash.forEach(h -> newTaskUserCells.add(new TaskUserCell(taskId, reviewerId, h)));
|
||||
}
|
||||
}
|
||||
}
|
||||
return newTaskUserCells;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateCell2WorkerAndData2Worker(int taskId,
|
||||
Map<String, Integer> cellToWorker,
|
||||
Map<String, Map<Long, Integer>> dataToWorker) throws Exception {
|
||||
// 更新表 task_user_cell
|
||||
taskUserCellService.updateUserIdByTaskIdAndCellGeohash(taskId, cellToWorker);
|
||||
// 更新数据-人员的对应关系
|
||||
String updateReviewerResult = baseService.updateRootTableDataForReviewer(taskService.getTaskById(taskId), dataToWorker);
|
||||
if (!updateReviewerResult.equals("succeed")) {
|
||||
throw new Exception(String.format("更新任务 %d 的数据-人员对应关系时发生异常", taskId));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateUser2RoleAndUser2CellAndUser2Data(int taskId, int userId, boolean isReviewer) throws Exception {
|
||||
// 更新 task_user_role
|
||||
taskUserRoleService.deleteByTaskIdAndUserId(taskId, userId);
|
||||
// 更新 task_user_cell
|
||||
taskUserCellService.deleteByTaskIdAndUserId(taskId, userId);
|
||||
// TODO: 更新人员-数据的对应关系
|
||||
if (!isReviewer) {
|
||||
return;
|
||||
}
|
||||
Task task = taskService.getTaskById(taskId);
|
||||
String databaseName = task.getDatabaseName();
|
||||
Map<String, Table> tables = JSON.toJavaObject(JSON.parseObject(task.getConfig()), Config.class).getRootTables();
|
||||
String formatUpdateSql = "UPDATE {0} SET reviewer = -1 where {1} IN (SELECT {1} from {0} WHERE reviewer = {2});";
|
||||
for (Map.Entry<String, Table> tableEntry : tables.entrySet()) {
|
||||
String updateResult = baseService.updateSqlString(
|
||||
MessageFormat.format(formatUpdateSql, PostgreSqlUtil.buildTableNameString(databaseName, tableEntry.getKey(), false, false),
|
||||
PostgreSqlUtil.transformString(TableOperationUtil.getPrimaryKey(tableEntry.getValue())), userId));
|
||||
if (updateResult.equals(CommonConstant.FAILED)) {
|
||||
throw new Exception("失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public boolean updateUser2RoleAndUser2CellAndUser2Data(int taskId, String geohash, int userId, boolean isReviewer) throws Exception {
|
||||
boolean free = false;
|
||||
// 从 task_user_cell 中删除
|
||||
taskUserCellService.deleteByTaskIdAndCellGeohashAndUserId(taskId, geohash, userId);
|
||||
// if (taskUserCellService.countByTaskIdAndUserId(taskId, userId) == 0) {
|
||||
// // 从 task_user_role 中删除
|
||||
// taskUserRoleService.deleteByTaskIdAndUserId(taskId, userId);
|
||||
// free = true;
|
||||
// }
|
||||
// TODO: 如果是审核人员,更新人员-数据的对应关系
|
||||
if (isReviewer) {
|
||||
Map<String, Map<Long, Integer>> updateData = new HashMap<>();
|
||||
taskCellDataService
|
||||
.findByTaskIdAndGeohash(taskId, geohash)
|
||||
.stream()
|
||||
.collect(Collectors.groupingBy(TaskCellData::getTableName))
|
||||
.forEach((table, list) -> {
|
||||
Map<Long, Integer> dataToWorker = list
|
||||
.stream()
|
||||
.map(TaskCellData::getDataId)
|
||||
.map(dataId -> new AbstractMap.SimpleEntry<>(dataId, -1))
|
||||
.collect(Collectors.toMap(AbstractMap.SimpleEntry::getKey, AbstractMap.SimpleEntry::getValue));
|
||||
updateData.put(table, dataToWorker);
|
||||
});
|
||||
String updateReviewerResult = baseService.updateRootTableDataForReviewer(taskService.getTaskById(taskId), updateData);
|
||||
if (!updateReviewerResult.equals("succeed")) {
|
||||
throw new Exception(String.format("更新任务 %d 的数据-人员对应关系时发生异常", taskId));
|
||||
}
|
||||
}
|
||||
return free;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteTaskInfo(int taskId) {
|
||||
taskCellDataService.deleteByTaskId(taskId);
|
||||
taskCellService.deleteByTaskId(taskId);
|
||||
taskUserCellService.deleteByTaskId(taskId);
|
||||
taskUserRoleService.deleteByTaskId(taskId);
|
||||
cacheService.delete(RedisKeyType.CELL.toString() + taskId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void completeChangingWorkersInCell(int taskId, String geohash, Collection<Integer> userIds, Map<String, Map<Long, Integer>> assignedData) throws Exception {
|
||||
List<TaskUserCell> taskUserCells = userIds
|
||||
.stream()
|
||||
.map(userId -> {
|
||||
TaskUserCell tuc = new TaskUserCell();
|
||||
tuc.setUserId(userId);
|
||||
tuc.setCellGeohash(geohash);
|
||||
tuc.setTaskId(taskId);
|
||||
return tuc;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
taskUserCellService.deleteByTaskIdAndCellGeohash(taskId, geohash);
|
||||
taskUserCellService.insertList(taskUserCells);
|
||||
if (assignedData != null && !assignedData.isEmpty()) {
|
||||
String updateReviewerResult = baseService.updateRootTableDataForReviewer(taskService.getTaskById(taskId), assignedData);
|
||||
if (!updateReviewerResult.equals("succeed")) {
|
||||
throw new Exception(String.format("更新任务 %d 的数据-人员对应关系时发生异常", taskId));
|
||||
}
|
||||
}
|
||||
|
||||
// 使网格相关的缓存失效
|
||||
cacheService.delete(RedisKeyType.CELL.toString() + taskId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void completeChangingWorkers(int taskId, Map<Integer, Integer> appendWorker2role, Map<Integer, Integer> deleteWorker2role) throws Exception {
|
||||
// 注意要先删后增,这样就可以修改已有工作人员的工作角色
|
||||
// 删除工作人员
|
||||
if (deleteWorker2role != null && !deleteWorker2role.isEmpty()) {
|
||||
for (Map.Entry<Integer, Integer> e : deleteWorker2role.entrySet()) {
|
||||
updateUser2RoleAndUser2CellAndUser2Data(taskId, e.getKey(), e.getValue().equals(1));
|
||||
}
|
||||
cacheService.delete(RedisKeyType.CELL.toString() + taskId);
|
||||
}
|
||||
|
||||
// 添加工作人员
|
||||
if (appendWorker2role != null && !appendWorker2role.isEmpty()) {
|
||||
List<TaskUserRole> userRoles = appendWorker2role
|
||||
.entrySet()
|
||||
.stream()
|
||||
.map(e -> new TaskUserRole(taskId, e.getKey(), e.getValue()))
|
||||
.collect(Collectors.toList());
|
||||
taskUserRoleService.insertList(userRoles);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void setTaskAllocationOptional(int taskId, boolean optional) {
|
||||
taskMapper.updateTaskAllocationOptional(taskId, optional ? 1 : 0);
|
||||
// 如果不需要分配,把原先的分配结果清空
|
||||
if (optional) {
|
||||
deleteTaskInfo(taskId);
|
||||
}
|
||||
// 更新缓存
|
||||
cacheService.delete(RedisKeyType.TASK + String.valueOf(taskId));
|
||||
cacheService.delete(RedisKeyType.TASK + "hasCreate");
|
||||
cacheService.delete(RedisKeyType.TASK + "all");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTaskAllocationOptional(int taskId) {
|
||||
Integer result = taskMapper.isTaskAllocationOptional(taskId);
|
||||
return result != null && (result == 1);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
package cn.edu.whu.boot.allocation.services.impl;
|
||||
|
||||
import cn.edu.whu.boot.allocation.controllers.dtos.Worker;
|
||||
import cn.edu.whu.boot.allocation.entities.TaskUserCell;
|
||||
import cn.edu.whu.boot.allocation.mapper.TaskUserCellMapper;
|
||||
import cn.edu.whu.boot.allocation.services.TaskUserCellService;
|
||||
import org.apache.ibatis.session.ExecutorType;
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
@Service
|
||||
public class TaskUserCellServiceImpl implements TaskUserCellService {
|
||||
|
||||
private final TaskUserCellMapper taskUserCellMapper;
|
||||
|
||||
private final SqlSessionFactory sqlSessionFactory;
|
||||
|
||||
public TaskUserCellServiceImpl(TaskUserCellMapper taskUserCellMapper, SqlSessionFactory sqlSessionFactory) {
|
||||
this.taskUserCellMapper = taskUserCellMapper;
|
||||
this.sqlSessionFactory = sqlSessionFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<TaskUserCell> findById(int id) {
|
||||
return Optional.ofNullable(taskUserCellMapper.findById(id));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskUserCell> findByTaskIdAndUserId(int taskId, int userId) {
|
||||
return taskUserCellMapper.findByTaskIdAndUserId(taskId, userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Worker> findWorkerByTaskId(int taskId) {
|
||||
return taskUserCellMapper.findCellAndUserByTaskId(taskId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Worker> findWorkerByTaskIdAndUserId(int taskId, int userId) {
|
||||
return taskUserCellMapper.findCellAndUserByTaskIdAndUserId(taskId, userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<TaskUserCell> findByTaskIdAndUserIdAndCellGeohash(int taskId, int userId, String geohash) {
|
||||
return Optional.ofNullable(taskUserCellMapper.findByTaskIdAndUserIdAndCellGeohash(taskId, userId, geohash));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int countByTaskIdAndUserId(int taskId, int userId) {
|
||||
return taskUserCellMapper.countByTaskIdAndUserId(taskId, userId);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public int insert(TaskUserCell taskUserCell) {
|
||||
return taskUserCellMapper.insert(taskUserCell);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void insertList(List<TaskUserCell> list) {
|
||||
if (list == null || list.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (list.size() * 3 <= 2000) {
|
||||
taskUserCellMapper.insertForeach(list);
|
||||
} else {
|
||||
try (SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH)) {
|
||||
TaskUserCellMapper mapper = session.getMapper(TaskUserCellMapper.class);
|
||||
list.forEach(mapper::insert);
|
||||
session.commit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateUserIdByTaskIdAndCellGeohash(int taskId, Map<String, Integer> cellToWorker) throws Exception {
|
||||
if (cellToWorker == null || cellToWorker.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
for (Map.Entry<String, Integer> entry : cellToWorker.entrySet()) {
|
||||
String geohash = entry.getKey();
|
||||
Integer userId = entry.getValue();
|
||||
int affectedRow = taskUserCellMapper.updateUserIdByTaskIdAndCellGeohash(taskId, geohash, userId);
|
||||
if (affectedRow == 0) {
|
||||
throw new Exception(
|
||||
String.format(
|
||||
"修改失败,不存在 %d 号任务或是该任务中不存在编号为 %s 的网格",
|
||||
taskId,
|
||||
geohash
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteByTaskId(int taskId) {
|
||||
taskUserCellMapper.deleteByTaskId(taskId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteByTaskIdAndUserId(int taskId, int userId) {
|
||||
taskUserCellMapper.deleteByTaskIdAndUserId(taskId, userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteByTaskIdAndCellGeohashAndUserId(int taskId, String geohash, int userId) {
|
||||
taskUserCellMapper.deleteByTaskIdAndCellGeohashAndUserId(taskId, geohash, userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteByTaskIdAndCellGeohash(int taskId, String geohash) {
|
||||
taskUserCellMapper.deleteByTaskIdAndCellGeohash(taskId, geohash);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
package cn.edu.whu.boot.allocation.services.impl;
|
||||
|
||||
import cn.edu.whu.boot.allocation.controllers.dtos.Worker;
|
||||
import cn.edu.whu.boot.allocation.entities.TaskUserRole;
|
||||
import cn.edu.whu.boot.allocation.mapper.TaskUserRoleMapper;
|
||||
import cn.edu.whu.boot.allocation.services.TaskUserRoleService;
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@Service
|
||||
public class TaskUserRoleImpl implements TaskUserRoleService {
|
||||
|
||||
private final TaskUserRoleMapper taskUserRoleMapper;
|
||||
|
||||
private final SqlSessionFactory sqlSessionFactory;
|
||||
|
||||
@Autowired
|
||||
public TaskUserRoleImpl(TaskUserRoleMapper taskUserRoleMapper, SqlSessionFactory sqlSessionFactory) {
|
||||
this.taskUserRoleMapper = taskUserRoleMapper;
|
||||
this.sqlSessionFactory = sqlSessionFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaskUserRole findById(int id) {
|
||||
return taskUserRoleMapper.findById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskUserRole> findByTaskId(int taskId) {
|
||||
return taskUserRoleMapper.findByTaskId(taskId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskUserRole> findByUserId(int userId) {
|
||||
return taskUserRoleMapper.findByUserId(userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Worker> findWorkerByTaskId(int taskId) {
|
||||
return taskUserRoleMapper.findWorkerByTaskId(taskId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<Integer> findWorkRoleByTaskIdAndUserId(int taskId, int userId) {
|
||||
return Optional.ofNullable(taskUserRoleMapper.findWorkRoleByTaskIdAndUserId(taskId, userId));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void insertList(List<TaskUserRole> list) {
|
||||
if (list != null && !list.isEmpty()) {
|
||||
taskUserRoleMapper.insertForeach(list);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public TaskUserRole update(TaskUserRole taskUserRole) {
|
||||
int id = taskUserRoleMapper.update(taskUserRole);
|
||||
return taskUserRoleMapper.findById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Integer> getUserIdByTaskId(int taskId) {
|
||||
return taskUserRoleMapper.getUserIdByTaskId(taskId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteByTaskId(int taskId) {
|
||||
taskUserRoleMapper.deleteByTaskId(taskId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteByTaskIdAndUserId(int taskId, int userId) {
|
||||
taskUserRoleMapper.deleteByTaskIdAndUserId(taskId, userId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package cn.edu.whu.boot.apkversion.controller;
|
||||
|
||||
import cn.edu.whu.boot.apkversion.service.ApkVersionService;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
|
||||
@Controller
|
||||
@RequestMapping("apkversion")
|
||||
public class ApkVersionController {
|
||||
|
||||
@Autowired
|
||||
ApkVersionService versionService;
|
||||
|
||||
@RequestMapping(value="latest",produces="text/html;charset=UTF-8")
|
||||
@ResponseBody
|
||||
public String getLatestVersionInfo(){
|
||||
|
||||
String latestVersion=versionService.getLatestVersion();
|
||||
String downUrl=versionService.getApkPath(latestVersion);
|
||||
String description=versionService.getDescriptionByVersion(latestVersion);
|
||||
JSONObject jsonVersion=new JSONObject();
|
||||
jsonVersion.put("version",latestVersion);
|
||||
jsonVersion.put("downUrl",downUrl);
|
||||
jsonVersion.put("description",description);
|
||||
return JSON.toJSONString(jsonVersion);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package cn.edu.whu.boot.apkversion.mapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface ApkVersionMapper {
|
||||
|
||||
String getLatestVersion();
|
||||
String getApkPathByVersion(@Param("versionCode") String versionCode);
|
||||
String getDescriptionByVersion(@Param("versionCode") String versionCode);
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package cn.edu.whu.boot.apkversion.service;
|
||||
|
||||
import cn.edu.whu.boot.apkversion.mapper.ApkVersionMapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class ApkVersionService {
|
||||
|
||||
@Autowired
|
||||
public ApkVersionMapper apkVersionMapper;
|
||||
|
||||
public String getLatestVersion() {
|
||||
String lastversion=apkVersionMapper.getLatestVersion();
|
||||
if(lastversion!=null && !lastversion.equals("")){
|
||||
return lastversion;
|
||||
}
|
||||
return "0.1";
|
||||
}
|
||||
|
||||
public String getDescriptionByVersion(String version) {
|
||||
String lastversion="无说明信息!";
|
||||
String res=apkVersionMapper.getDescriptionByVersion(version);
|
||||
if(res!=null&&!res.equals("")){
|
||||
lastversion=res;
|
||||
}
|
||||
return lastversion;
|
||||
}
|
||||
|
||||
public String getApkPath(String version) {
|
||||
String apkPath=apkVersionMapper.getApkPathByVersion(version);
|
||||
if (apkPath!=null&& !apkPath.equals("")){
|
||||
return apkPath;
|
||||
}else {
|
||||
return "该版本不存在";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,438 @@
|
||||
package cn.edu.whu.boot.collection.controller;
|
||||
|
||||
import cn.edu.whu.boot.allocation.services.TaskCellService;
|
||||
import cn.edu.whu.boot.allocation.services.TaskUserRoleService;
|
||||
import cn.edu.whu.boot.collection.dto.CompositeKey;
|
||||
import cn.edu.whu.boot.collection.service.IBaseService;
|
||||
import cn.edu.whu.boot.common.domain.CommonConstant;
|
||||
import cn.edu.whu.boot.common.domain.ResultMessage;
|
||||
import cn.edu.whu.boot.common.domain.SqlStringConstant;
|
||||
import cn.edu.whu.boot.common.utils.collection.OtherUtil;
|
||||
import cn.edu.whu.boot.common.utils.collection.PostgreSqlUtil;
|
||||
import cn.edu.whu.boot.common.utils.collection.TableOperationUtil;
|
||||
import cn.edu.whu.boot.common.utils.xml.CheckTableDataUtil;
|
||||
import cn.edu.whu.boot.common.utils.xml.GenerateSqlUtil;
|
||||
import cn.edu.whu.boot.user.entities.User;
|
||||
import cn.edu.whu.boot.user.services.UserService;
|
||||
import cn.edu.whu.boot.xml.domain.Task;
|
||||
import cn.edu.whu.boot.xml.service.ITaskService;
|
||||
import cn.edu.whu.boot.xml.xmlreader.bean.Config;
|
||||
import cn.edu.whu.boot.xml.xmlreader.bean.Table;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.*;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* 这个类里面放的东西很杂,写的不规范!!! 具体每个方法的作用看方法的注释
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("base")
|
||||
public class BaseController{
|
||||
|
||||
private static final Logger logger = (Logger) LoggerFactory.getLogger(BaseController.class);
|
||||
private final ITaskService taskService;
|
||||
private final IBaseService baseService;
|
||||
private final UserService userService;
|
||||
private final TaskUserRoleService taskUserRoleService;
|
||||
private final TaskCellService taskCellService;
|
||||
|
||||
@Autowired
|
||||
public BaseController(ITaskService taskService, IBaseService baseService, UserService userService,
|
||||
TaskUserRoleService taskUserRoleService, TaskCellService taskCellService){
|
||||
this.taskService = taskService;
|
||||
this.baseService = baseService;
|
||||
this.userService = userService;
|
||||
this.taskUserRoleService = taskUserRoleService;
|
||||
this.taskCellService = taskCellService;
|
||||
}
|
||||
/**
|
||||
* 接受移动端传来的数据和多媒体文件,并将数据保存在数据库中,多媒体文件保存在本地!
|
||||
*
|
||||
* @param detail 按指定格式封装的 JsonString
|
||||
* @param file 多媒体压缩包,注意多媒体文件也可以上传
|
||||
*/
|
||||
@RequestMapping(value = "insertAndRecheckData", produces = "text/html;charset=UTF-8")
|
||||
public String insertAndRecheckData(String detail, MultipartFile file) throws Exception {
|
||||
try {
|
||||
JSONObject jsonObject = JSON.parseObject(detail);
|
||||
JSONObject tableJsonObject = jsonObject.getJSONObject("table");
|
||||
|
||||
// 预处理JSON中的boolean值
|
||||
preprocessBooleanValues(tableJsonObject);
|
||||
|
||||
Table table = JSON.parseObject(tableJsonObject.toJSONString(), Table.class);
|
||||
|
||||
// Table table = JSON.toJavaObject(tableJsonObject, Table.class);
|
||||
Integer taskId = jsonObject.getInteger("taskId");
|
||||
// 判断当前任务是否存在
|
||||
Task task = taskService.getTaskById(taskId);
|
||||
if (task == null) {
|
||||
return ResultMessage.failed("当前任务已删除!").toString();
|
||||
}
|
||||
|
||||
// 判断该用户是否在对应的任务中
|
||||
int userId = jsonObject.getIntValue("userId");
|
||||
if(!OtherUtil.isUserInTask(task, userId, taskUserRoleService)){
|
||||
return ResultMessage.failed("您不在该任务中!").toString();
|
||||
}
|
||||
|
||||
table = TableOperationUtil.changeJsonObjectToField(table);
|
||||
JSONArray multimediaItemJsonArray =
|
||||
(JSONArray) TableOperationUtil.getFieldValue(table, TableOperationUtil.getCameraFieldName(table));
|
||||
// polygonIdFromAndroid 为移动端传入的数据主键,polygonId 是返回给移动端的数据主键
|
||||
String primaryKey = TableOperationUtil.getPrimaryKey(table);
|
||||
Object polygonIdStringFromAndroid = TableOperationUtil.getFieldValue(table, primaryKey);
|
||||
Long polygonIdFromAndroid = null;
|
||||
if(polygonIdStringFromAndroid != null){
|
||||
polygonIdFromAndroid = Long.parseLong(polygonIdStringFromAndroid.toString());
|
||||
}
|
||||
Long polygonId;
|
||||
|
||||
|
||||
CompositeKey compositeKey = new CompositeKey();
|
||||
String trueTableName = PostgreSqlUtil.buildTableNameString(task.getDatabaseName(), table.getKey(),
|
||||
false, false);
|
||||
|
||||
// 情况1 : polygonIdFromAndroid == null,新采集的数据
|
||||
if(polygonIdFromAndroid == null){
|
||||
polygonId = baseService.insertData(task, table, userId, multimediaItemJsonArray, file);
|
||||
compositeKey.setPolygonId(polygonId);
|
||||
compositeKey.setVersion(baseService.getVersionByLongId(trueTableName,
|
||||
PostgreSqlUtil.transformString(primaryKey),
|
||||
polygonId));
|
||||
}
|
||||
// 情况2 : polygonIdFromAndroid != null ,说明不是新采集的数据,之前采集过一次!
|
||||
// 说明这条数据为复核数据(数据上传错了,重新上传也归为复核)
|
||||
else{
|
||||
Integer versionCodeInTable = baseService.getVersionByLongId(trueTableName,
|
||||
PostgreSqlUtil.transformString(primaryKey),
|
||||
polygonIdFromAndroid);
|
||||
if(versionCodeInTable == null){
|
||||
return ResultMessage.failed("数据库中无对应数据!").toString();
|
||||
}
|
||||
// versionCode 为复核上传的记录版本,versionCodeInTable 为根表中记录版本
|
||||
int version = (int) TableOperationUtil.getFieldValue(table, CommonConstant.FIX_FIELD_VERSION);
|
||||
if(versionCodeInTable > version){
|
||||
return ResultMessage.failed(8888, "版本号过低").toString();
|
||||
}
|
||||
// 上传版本号 >= 根表中记录版本,进行更新根表中数据版本(根表中数据更新,像多媒体表和关联表的数据先删除再插入)
|
||||
// 在上述操作之前必须将旧版本数据放在历史数据库中
|
||||
polygonIdFromAndroid = baseService.updateRecheckData(task, table, userId,
|
||||
multimediaItemJsonArray, polygonIdFromAndroid, file);
|
||||
compositeKey.setPolygonId(polygonIdFromAndroid);
|
||||
compositeKey.setVersion(baseService.getVersionByLongId(trueTableName,
|
||||
PostgreSqlUtil.transformString(primaryKey),
|
||||
polygonIdFromAndroid));
|
||||
}
|
||||
return ResultMessage.success(compositeKey).toString();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
logger.error("数据处理失败: {}", e.getMessage());
|
||||
return ResultMessage.failed("数据格式错误: " + e.getMessage()).toString();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 预处理JSON中的boolean值,将表达式转换为实际的boolean值
|
||||
*/
|
||||
public void preprocessBooleanValues(Map<String, Object> data) {
|
||||
if (data == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (Map.Entry<String, Object> entry : data.entrySet()) {
|
||||
Object value = entry.getValue();
|
||||
if (value instanceof Map) {
|
||||
preprocessBooleanValues((Map<String, Object>) value);
|
||||
} else if (value instanceof String) {
|
||||
String strValue = (String) value;
|
||||
try {
|
||||
// 处理特殊表达式情况
|
||||
if (strValue.contains("length==")) {
|
||||
// 简单处理长度检查表达式
|
||||
boolean isEmpty = strValue.contains("length==0");
|
||||
entry.setValue(isEmpty);
|
||||
logger.info("Converted expression '{}' to {}", strValue, isEmpty);
|
||||
}
|
||||
// 处理标准布尔值
|
||||
else if ("true".equalsIgnoreCase(strValue)) {
|
||||
entry.setValue(true);
|
||||
} else if ("false".equalsIgnoreCase(strValue)) {
|
||||
entry.setValue(false);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.warn("Failed to parse value '{}': {}", strValue, e.getMessage());
|
||||
// 保持原始值不变
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 将某个根表下某数据回退到某个历史版本
|
||||
*
|
||||
* @param taskId 任务id
|
||||
* @param tableName 表名
|
||||
* @param polygonId 数据主键id
|
||||
* @param version 版本号
|
||||
*/
|
||||
@RequestMapping(value = "rollBackDataForVersion", produces = "text/html;charset=UTF-8")
|
||||
public String rollBackDataForVersion(Integer taskId, String tableName, Long polygonId,
|
||||
Integer version) throws Exception{
|
||||
Task task = taskService.getTaskById(taskId);
|
||||
Config config = JSON.toJavaObject(JSON.parseObject(task.getConfig()), Config.class);
|
||||
Map<String, Table> tablesMap = config.getTables();
|
||||
Table table = tablesMap.get(tableName);
|
||||
String primaryKey = TableOperationUtil.getPrimaryKey(table);
|
||||
String selectSql =
|
||||
GenerateSqlUtil.genSqlByPolygonIdAndVersionId(task.getDatabaseName(),
|
||||
tableName + CommonConstant.HISTORY_SUFFIX,
|
||||
primaryKey, polygonId, version);
|
||||
|
||||
// 获取根表数据中主键字段值为polygonId,version 字段为 versionId 的记录,然后进行回滚更新
|
||||
List<Map<String, Object>> rootTableDataList = baseService.selectData(selectSql);
|
||||
ResultMessage resultMessage = OtherUtil.checkDataListGetByPolygonId(rootTableDataList);
|
||||
if(!resultMessage.isSuccess()){
|
||||
return resultMessage.toString();
|
||||
}
|
||||
String updateSqlForRootTable = GenerateSqlUtil.generateUpdateSqlByData(rootTableDataList.get(0),
|
||||
task.getDatabaseName(), tableName,
|
||||
primaryKey, polygonId, task.getConfig());
|
||||
String result = baseService.rollBackDataForVersion(task, table, updateSqlForRootTable, polygonId, version);
|
||||
if(result.equals(CommonConstant.SUCCEED)){
|
||||
return ResultMessage.success(null).toString();
|
||||
}
|
||||
else{
|
||||
return ResultMessage.failed(null).toString();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 指定某个数据审核通过,或者审核未通过! 如果审核未通过需要提供原因
|
||||
* @param taskId 任务 id
|
||||
* @param tableName 表名
|
||||
* @param polygonId 数据主键
|
||||
* @param pass 审核是否通过
|
||||
* @param reason 审核未通过原因
|
||||
*/
|
||||
@RequestMapping(value = "setDataStatus", produces = "text/html;charset=UTF-8")
|
||||
public String setDataStatus(Integer taskId, String tableName, Long polygonId, boolean pass, String reason){
|
||||
Task task = taskService.getTaskById(taskId);
|
||||
Config config = JSON.toJavaObject(JSON.parseObject(task.getConfig()), Config.class);
|
||||
Map<String, Table> tablesMap = config.getTables();
|
||||
Table table = tablesMap.get(tableName);
|
||||
String tableNameInDb = PostgreSqlUtil.buildTableNameString(task.getDatabaseName(), tableName, false, false);
|
||||
int status;
|
||||
if(pass){
|
||||
status = 2;
|
||||
reason = null;
|
||||
}
|
||||
else{
|
||||
status = -1;
|
||||
}
|
||||
baseService.updateTableStatus(tableNameInDb, PostgreSqlUtil.transformString(TableOperationUtil.getPrimaryKey(table)),
|
||||
polygonId, status, reason);
|
||||
return ResultMessage.success(null).toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据某任务的统计时间,进行每天的数据统计,并返回给前端! 该接口也就是网页端的“异常监管”!
|
||||
* 需要将异常范围的上下边界两个参数值提供出来
|
||||
* @param taskId 任务 id
|
||||
* @param tableName 表名, 注意如果 tableName 是 "" ,表明需要统计所有的根表
|
||||
* @param lowLimit 下边界
|
||||
* @param highLimit 上边界
|
||||
*/
|
||||
@RequestMapping(value = "getWarningForUser", produces = "text/html;charset=UTF-8")
|
||||
public String getCountForUserEveryday(Integer taskId, String tableName, double lowLimit, double highLimit){
|
||||
List<User> workers = taskService.getWorkersByTask(taskId);
|
||||
if (workers.isEmpty()) {
|
||||
return new ResultMessage<>(true, "任务下无外业人员").toString();
|
||||
}
|
||||
|
||||
Set<String> tableNameSet;
|
||||
List<Map<String, Object>> unusualData = new ArrayList<>();
|
||||
// yearMonthDayList 表示采集数据的年月日,对任务中每个根表进行统计
|
||||
List<String> yearMonthDayList = new ArrayList<>();
|
||||
// 不区分巡查员和采集员,放在一起计算工作量!
|
||||
Task task = taskService.getTaskById(taskId);
|
||||
Long allDataCount = 0L;
|
||||
if("mmoo".equals(tableName)){
|
||||
tableNameSet = JSON.toJavaObject(JSON.parseObject(task.getConfig()), Config.class).getRootTables().keySet();
|
||||
}
|
||||
else{
|
||||
tableNameSet = new HashSet<>();
|
||||
tableNameSet.add(tableName);
|
||||
}
|
||||
for(String rootTableName : tableNameSet){
|
||||
String rootTableNameInDb = PostgreSqlUtil.buildTableNameString(task.getDatabaseName(), rootTableName, false, false);
|
||||
allDataCount += baseService.getHasCollectAndPatrolDataCount(rootTableNameInDb);
|
||||
String selectYearMonthDaySql = MessageFormat.format("select DISTINCT(to_char(update_time,{1})) as collect_date from {0}" +
|
||||
"where status = 1 or status = 2 " +
|
||||
"ORDER BY collect_date",
|
||||
rootTableNameInDb, "\'yyyy-MM-dd\'");
|
||||
List<Map<String, Object>> yearMonthDayResult = baseService.selectData(selectYearMonthDaySql);
|
||||
if(yearMonthDayResult != null && yearMonthDayResult.size() != 0){
|
||||
for(Map<String, Object> yearMonthDay : yearMonthDayResult){
|
||||
if(!yearMonthDayList.contains(yearMonthDay.get("collect_date").toString())){
|
||||
yearMonthDayList.add(yearMonthDay.get("collect_date").toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
yearMonthDayList.sort(Comparator.naturalOrder());
|
||||
// 判断 yearMonthDayList 是否有当天的日期,若有将它排除,以及 yearMonthDayList 为空就返回
|
||||
if(yearMonthDayList.size() == 0){
|
||||
return new ResultMessage<>(true, "任务下无数据").toString();
|
||||
}
|
||||
// 从数据中获取的平均工作量
|
||||
int avgCollectionNum = (int)(allDataCount / workers.size() / yearMonthDayList.size()),
|
||||
lowLimitNum = (int)(avgCollectionNum * lowLimit),
|
||||
highLimitNum = (int)(avgCollectionNum * highLimit);
|
||||
|
||||
// 获取任务中的数据
|
||||
for(User worker : workers){
|
||||
Map<String, Object> tempMap = new HashMap<>();
|
||||
Optional<User> userOptional = userService.findById(worker.getId());
|
||||
// 获取该外业人员异常日期及该日期下对应的工作量
|
||||
Map<String, Long> dataCountForDayMap = new HashMap<>();
|
||||
for(String rootTableName : tableNameSet){
|
||||
String rootTableNameInDb = PostgreSqlUtil.buildTableNameString(task.getDatabaseName(), rootTableName, false, false);
|
||||
List<Map<String, Object>> dataCountAndTimeList = baseService.getDataCountAndTimeByUser(rootTableNameInDb, worker.getId());
|
||||
for(Map<String, Object> dataCountAndTimeMap : dataCountAndTimeList){
|
||||
String time = dataCountAndTimeMap.get("updateTime").toString();
|
||||
Long countValue = Long.valueOf(dataCountAndTimeMap.get("dataCount").toString());
|
||||
if(!dataCountForDayMap.containsKey(time)){
|
||||
dataCountForDayMap.put(time, countValue);
|
||||
}
|
||||
else{
|
||||
Long dataCountAdd = dataCountForDayMap.get(time) + countValue;
|
||||
dataCountForDayMap.remove(time);
|
||||
dataCountForDayMap.put(time, dataCountAdd);
|
||||
}
|
||||
}
|
||||
}
|
||||
List<Map<String, Object>> unusualDayList = new ArrayList<>();
|
||||
for(String yearMonthDay : yearMonthDayList){
|
||||
if(!dataCountForDayMap.containsKey(yearMonthDay)){
|
||||
Map<String, Object> unusualDayMap = new HashMap<>();
|
||||
unusualDayMap.put("day", yearMonthDay);
|
||||
unusualDayMap.put("num", 0);
|
||||
unusualDayList.add(unusualDayMap);
|
||||
}
|
||||
else if(dataCountForDayMap.get(yearMonthDay) < lowLimitNum
|
||||
|| dataCountForDayMap.get(yearMonthDay) > highLimitNum){
|
||||
Map<String, Object> unusualDayMap = new HashMap<>();
|
||||
unusualDayMap.put("day", yearMonthDay);
|
||||
unusualDayMap.put("num", dataCountForDayMap.get(yearMonthDay));
|
||||
unusualDayList.add(unusualDayMap);
|
||||
}
|
||||
}
|
||||
if(unusualDayList.size() != 0){
|
||||
tempMap.put("unusualDay", unusualDayList);
|
||||
tempMap.put("userName", userOptional.get().getUsername());
|
||||
unusualData.add(tempMap);
|
||||
}
|
||||
}
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("unusualData", unusualData);
|
||||
result.put("averageNum", avgCollectionNum);
|
||||
result.put("lowLimitNum", lowLimitNum);
|
||||
result.put("highLimitNum", highLimitNum);
|
||||
return ResultMessage.success(result).toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据前端传入的任务 taskId 及经纬度范围进行数据抽稀,只返回某范围的数据个数
|
||||
* accuracy、longitudeMin、latitudeMin、longitudeMax、latitudeMax
|
||||
* 缩放精度、 最小经度 、 最小纬度 、 最大经度 、 最大纬度
|
||||
*/
|
||||
@RequestMapping(value = "getCountByGeoHash", produces = "text/html;charset=UTF-8")
|
||||
public String getCountByGeoHash(Integer taskId, String tableName, Integer accuracy, Double longitudeMin,
|
||||
Double latitudeMin, Double longitudeMax, Double latitudeMax){
|
||||
Task task = taskService.getTaskById(taskId);
|
||||
Table table = JSON.toJavaObject(JSON.parseObject(task.getConfig()), Config.class).getTables().get(tableName);
|
||||
// 获取几何字段名
|
||||
String geometryFieldName = CheckTableDataUtil.getGeometryFieldName(table);
|
||||
|
||||
// 如果没有几何字段,直接返回空
|
||||
if (geometryFieldName == null) {
|
||||
return ResultMessage.success(null).toString();
|
||||
}
|
||||
String tableNameInDb = PostgreSqlUtil.buildTableNameString(task.getDatabaseName(), tableName, false, false);
|
||||
|
||||
String selectSql = MessageFormat.format(SqlStringConstant.SELECT_SQL_BY_GEOHASH,
|
||||
tableNameInDb,
|
||||
PostgreSqlUtil.transformString(CheckTableDataUtil.getGeometryFieldName(table)),
|
||||
accuracy, longitudeMin, latitudeMin, longitudeMax, latitudeMax, "");
|
||||
List<Map<String, Object>> dataList = baseService.selectData(selectSql);
|
||||
if(dataList != null && dataList.size() != 0){
|
||||
List<Map<String, Object>> result = OtherUtil.genFeatureCountList(dataList);
|
||||
return ResultMessage.success(result).toString();
|
||||
}
|
||||
else{
|
||||
return ResultMessage.success(null).toString();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取热力图相关的数据
|
||||
* @param taskId 任务 id
|
||||
* @param tableName 表名
|
||||
*/
|
||||
@RequestMapping(value = "getHeatData", produces = "text/html;charset=UTF-8")
|
||||
public String getHeatData(Integer taskId, String tableName){
|
||||
Map<String, Object> coordinateRangeMap = taskCellService.getCoordinateRange(taskId);
|
||||
if(coordinateRangeMap != null && coordinateRangeMap.size() != 0){
|
||||
Task task = taskService.getTaskById(taskId);
|
||||
Table table = JSON.toJavaObject(JSON.parseObject(task.getConfig()), Config.class).getTables().get(tableName);
|
||||
String tableNameInDb = PostgreSqlUtil.buildTableNameString(task.getDatabaseName(), tableName, false, false);
|
||||
String selectSql = MessageFormat.format(SqlStringConstant.SELECT_CENTROID_SQL_BY_GEOHASH,
|
||||
tableNameInDb,
|
||||
PostgreSqlUtil.transformString(CheckTableDataUtil.getGeometryFieldName(table)), 7,
|
||||
Double.valueOf(coordinateRangeMap.get("xmin").toString()),
|
||||
Double.valueOf(coordinateRangeMap.get("ymin").toString()),
|
||||
Double.valueOf(coordinateRangeMap.get("xmax").toString()),
|
||||
Double.valueOf(coordinateRangeMap.get("ymax").toString()));
|
||||
List<Map<String, Object>> dataList = baseService.selectData(selectSql);
|
||||
if(dataList != null && dataList.size() != 0){
|
||||
List<Map<String, Object>> result = OtherUtil.genFeatureCountList(dataList);
|
||||
return ResultMessage.success(result).toString();
|
||||
}
|
||||
}
|
||||
return ResultMessage.success("null").toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据前端传入的任务 taskId,tableName 及中心点,获取据该中心点小于 100m 的数据
|
||||
*/
|
||||
@RequestMapping(value = "getDataByDistance", produces = "text/html;charset=UTF-8")
|
||||
public String getDataByDistance(Integer taskId, String tableName, Double longitude, Double latitude){
|
||||
Task task = taskService.getTaskById(taskId);
|
||||
Table table = JSON.toJavaObject(JSON.parseObject(task.getConfig()), Config.class).getTables().get(tableName);
|
||||
String tableNameInDb = PostgreSqlUtil.buildTableNameString(task.getDatabaseName(), tableName, false, false);
|
||||
String pointGeoJson = "\'{" + MessageFormat.format(SqlStringConstant.POINT_GEOGSON, longitude, latitude) + "}\'";
|
||||
String selectSql = MessageFormat.format(SqlStringConstant.SELECT_SQL_BY_DISTANCE, tableNameInDb,
|
||||
PostgreSqlUtil.transformString(CheckTableDataUtil.getGeometryFieldName(table)), pointGeoJson);
|
||||
List<Map<String, Object>> dataList = baseService.selectData(selectSql);
|
||||
String primaryKey = TableOperationUtil.getPrimaryKey(table);
|
||||
if(dataList != null && dataList.size() != 0){
|
||||
List<Long> result = new ArrayList<>();
|
||||
dataList.forEach(data -> result.add(Long.valueOf(data.get(primaryKey).toString())));
|
||||
return ResultMessage.success(result).toString();
|
||||
}
|
||||
else{
|
||||
return ResultMessage.success(null).toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package cn.edu.whu.boot.collection.controller;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
/**
|
||||
* Created by AJQK on 2018/5/31.
|
||||
*/
|
||||
@RequestMapping("/")
|
||||
@Controller
|
||||
public class DefaultController {
|
||||
|
||||
@RequestMapping
|
||||
public ModelAndView homepage(){
|
||||
return new ModelAndView("redirect:index.html");
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,457 @@
|
||||
package cn.edu.whu.boot.collection.controller;
|
||||
|
||||
import cn.edu.whu.boot.collection.service.ImportService;
|
||||
import cn.edu.whu.boot.common.domain.CommonConstant;
|
||||
import cn.edu.whu.boot.common.domain.ResultMessage;
|
||||
import cn.edu.whu.boot.common.utils.collection.OtherUtil;
|
||||
import cn.edu.whu.boot.common.utils.collection.TableOperationUtil;
|
||||
import cn.edu.whu.boot.xml.domain.Task;
|
||||
import cn.edu.whu.boot.xml.service.ITaskService;
|
||||
import cn.edu.whu.boot.xml.xmlreader.bean.Config;
|
||||
import cn.edu.whu.boot.xml.xmlreader.bean.Field;
|
||||
import cn.edu.whu.boot.xml.xmlreader.bean.Table;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
import org.apache.poi.ss.usermodel.Sheet;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
import org.geotools.data.FileDataStore;
|
||||
import org.geotools.data.FileDataStoreFinder;
|
||||
import org.geotools.data.shapefile.ShapefileDataStore;
|
||||
import org.geotools.data.shapefile.ShapefileDataStoreFactory;
|
||||
import org.geotools.data.simple.SimpleFeatureCollection;
|
||||
import org.geotools.data.simple.SimpleFeatureIterator;
|
||||
import org.geotools.data.simple.SimpleFeatureSource;
|
||||
import org.opengis.feature.type.AttributeDescriptor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 上传数据的相关接口!!!
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("import")
|
||||
public class ImportController{
|
||||
|
||||
private final ITaskService taskService;
|
||||
private final ImportService importService;
|
||||
|
||||
@Autowired
|
||||
public ImportController(ITaskService taskService, ImportService importService){
|
||||
this.taskService = taskService;
|
||||
this.importService = importService;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取任务下的根表信息
|
||||
* @param taskId 任务 id
|
||||
*/
|
||||
@RequestMapping(value = "getRootTablesName", produces = "text/html;charset=UTF-8")
|
||||
public String getRootTablesName(Integer taskId){
|
||||
Task task = taskService.getTaskById(taskId);
|
||||
if(task.getHasCreateTables() == 0){
|
||||
return ResultMessage.success(null).toString();
|
||||
}
|
||||
Map<String, Table> tables = JSON.toJavaObject(JSON.parseObject(task.getConfig()), Config.class).getRootTables();
|
||||
return ResultMessage.success(genTableNameList(tables)).toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取任务下的所有表信息
|
||||
* @param taskId 任务 id
|
||||
*/
|
||||
@RequestMapping(value = "getTablesName", produces = "text/html;charset=UTF-8")
|
||||
public String getAllTablesName(Integer taskId){
|
||||
Task task = taskService.getTaskById(taskId);
|
||||
if(task.getHasCreateTables() == 0){
|
||||
return ResultMessage.success(null).toString();
|
||||
}
|
||||
Map<String, Table> tables = JSON.toJavaObject(JSON.parseObject(task.getConfig()), Config.class).getTables();
|
||||
return ResultMessage.success(genTableNameList(tables)).toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 基于传入的 Map<String, Table> tables 将其按照某个规则转换成 List<Map<String, String>>
|
||||
*/
|
||||
private List<Map<String, String>> genTableNameList(Map<String, Table> tables){
|
||||
List<Map<String, String>> result = new ArrayList<>();
|
||||
if(MapUtils.isNotEmpty(tables)){
|
||||
tables.forEach((tableName, table) -> {
|
||||
Map<String, String> tempMap = new HashMap<>();
|
||||
tempMap.put("tableName", tableName);
|
||||
tempMap.put("tableChineseName", table.getName());
|
||||
result.add(tempMap);
|
||||
});
|
||||
return result;
|
||||
}
|
||||
else{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取任务下的表字段信息,得把关联表排除掉!!!
|
||||
* @param taskId 任务 id
|
||||
* @param tableName 表名
|
||||
*/
|
||||
@RequestMapping(value = "getTableFieldsName", produces = "text/html;charset=UTF-8")
|
||||
public String getTableFieldsName(Integer taskId, String tableName){
|
||||
Task task = taskService.getTaskById(taskId);
|
||||
Table table = JSON.toJavaObject(JSON.parseObject(task.getConfig()), Config.class).getTables().get(tableName);
|
||||
List<String> fieldNameList = new ArrayList<>();
|
||||
Map<String, Field> fields = table.getFields();
|
||||
fields.forEach((fieldName, field) -> {
|
||||
if((StringUtils.isBlank(field.getType()) || !CommonConstant.CAMERA.equals(field.getType()))
|
||||
&& !CommonConstant.FIX_FIELD_SET.contains(fieldName)
|
||||
&& StringUtils.isBlank(field.getAssociate())
|
||||
&& StringUtils.isBlank(field.getCollection())){
|
||||
fieldNameList.add(fieldName);
|
||||
}
|
||||
});
|
||||
return ResultMessage.success(fieldNameList).toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取源任务和目标任务间,表的映射关系
|
||||
* @param srcTaskId 源任务 id
|
||||
* @param destTaskId 目标任务 id
|
||||
*/
|
||||
@RequestMapping(value = "getTaskTableMapping", produces = "text/html;charset=UTF-8")
|
||||
public String getTaskTableMapping(Integer srcTaskId, Integer destTaskId){
|
||||
Task srcTask = taskService.getTaskById(srcTaskId);
|
||||
Task destTask = taskService.getTaskById(destTaskId);
|
||||
Map<String, Table> srcRootTables = JSON.toJavaObject(JSON.parseObject(srcTask.getConfig()), Config.class).getRootTables();
|
||||
Map<String, Table> destRootTables = JSON.toJavaObject(JSON.parseObject(destTask.getConfig()), Config.class).getRootTables();
|
||||
Set<String> destRootTablesNameSet = destRootTables.keySet();
|
||||
List<Map<String, String>> result = new ArrayList<>();
|
||||
srcRootTables.forEach((rootTableName, rootTable) -> {
|
||||
if(destRootTablesNameSet.contains(rootTableName)){
|
||||
Map<String, String> tempMap = new HashMap<>();
|
||||
tempMap.put("srcTable", rootTableName);
|
||||
tempMap.put("destTable", rootTableName);
|
||||
result.add(tempMap);
|
||||
}
|
||||
else{
|
||||
Map<String, String> tempMap = new HashMap<>();
|
||||
tempMap.put("srcTable", rootTableName);
|
||||
tempMap.put("destTable", "");
|
||||
result.add(tempMap);
|
||||
}
|
||||
});
|
||||
return ResultMessage.success(result).toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取源任务和目标任务间,源表和目标表的字段映射关系
|
||||
* @param srcTaskId 源任务 id
|
||||
* @param destTaskId 目标任务 id
|
||||
* @param srcTableName 源表名
|
||||
* @param destTableName 目标表名
|
||||
*/
|
||||
@RequestMapping(value = "getTaskTableFieldMapping", produces = "text/html;charset=UTF-8")
|
||||
public String getTaskTableFieldMapping(Integer srcTaskId, Integer destTaskId, String srcTableName, String destTableName){
|
||||
Task srcTask = taskService.getTaskById(srcTaskId);
|
||||
Task destTask = taskService.getTaskById(destTaskId);
|
||||
Table srcRootTable = JSON.toJavaObject(JSON.parseObject(srcTask.getConfig()), Config.class).getRootTables().get(srcTableName);
|
||||
Table destRootTable = JSON.toJavaObject(JSON.parseObject(destTask.getConfig()), Config.class).getRootTables().get(destTableName);
|
||||
Map<String, Field> srcRootTableFields = srcRootTable.getFields();
|
||||
Map<String, Field> destRootTableFields = destRootTable.getFields();
|
||||
Set<String> destRootTableFieldNameSet = destRootTableFields.keySet();
|
||||
List<Map<String, String>> result = new ArrayList<>();
|
||||
String srcCameraField = TableOperationUtil.getCameraFieldName(srcRootTable);
|
||||
srcRootTableFields.forEach((rootTableFieldName, rootTableField) -> {
|
||||
if(!CommonConstant.FIX_FIELD_SET.contains(rootTableFieldName)
|
||||
&& !rootTableFieldName.equals(srcCameraField)){
|
||||
addFieldNameToList(result, destRootTableFieldNameSet, rootTableFieldName);
|
||||
}
|
||||
});
|
||||
return ResultMessage.success(result).toString();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据网页端制定好的字段映射信息进行数据迁移
|
||||
* @param srcTaskId 源任务 id
|
||||
* @param destTaskId 目标任务 id
|
||||
* @param srcTableName 源表名
|
||||
* @param destTableName 目标表名
|
||||
* @param isSelective 是否抽查
|
||||
* @param selectDataNum 抽查数目,注意这是个字符串,如果字符串中带有“%”,说明是按照比例进行抽查!!!
|
||||
* 注意 % 只能在最后
|
||||
* @param whereClause 按照 where 语句抽查
|
||||
* @param fieldMapping 字段映射关系
|
||||
*/
|
||||
@RequestMapping(value = "taskTableDataMigration", produces = "text/html;charset=UTF-8")
|
||||
public String taskTableDataMigration(Integer srcTaskId, Integer destTaskId, String srcTableName,
|
||||
String destTableName, boolean isSelective,
|
||||
@RequestParam(required = false) String selectDataNum,
|
||||
@RequestParam(required = false) String whereClause,
|
||||
String fieldMapping) throws IOException{
|
||||
Task srcTask = taskService.getTaskById(srcTaskId);
|
||||
Task destTask = taskService.getTaskById(destTaskId);
|
||||
if(isSelective){
|
||||
// 检查 selectDataNum 是否符合要求
|
||||
if(selectDataNum.contains("%")){
|
||||
if(selectDataNum.indexOf("%") != selectDataNum.length() - 1){
|
||||
return new ResultMessage<>(true, "抽查数量不符合要求", 400).toString();
|
||||
}
|
||||
else{
|
||||
return importService.taskTableDataInsert(srcTask, destTask, srcTableName, destTableName, 2,
|
||||
Integer.parseInt(selectDataNum.substring(0, selectDataNum.length() - 1)), whereClause,
|
||||
fieldMapping).toString();
|
||||
}
|
||||
}
|
||||
else{
|
||||
if(Integer.parseInt(selectDataNum) <= 0 || Integer.parseInt(selectDataNum) > 9999){
|
||||
return new ResultMessage<>(true, "抽查数量不符合要求", 400).toString();
|
||||
}
|
||||
else{
|
||||
return importService.taskTableDataInsert(srcTask, destTask, srcTableName, destTableName, 1,
|
||||
Integer.parseInt(selectDataNum), whereClause, fieldMapping).toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
return importService.taskTableDataInsert(srcTask, destTask, srcTableName, destTableName, 0,
|
||||
0, null, fieldMapping).toString();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取.xlsx 或.xls文件与目标表的字段映射关系
|
||||
* @param destTaskId 目标任务 id
|
||||
* @param destTableName 目标表名
|
||||
* @param file .xlsx 或.xls文件
|
||||
*/
|
||||
@RequestMapping(value = "getFileAndFieldMapping", produces = "text/html;charset=UTF-8")
|
||||
public String getFileAndFieldMapping(Integer destTaskId, String destTableName,
|
||||
@RequestParam(name = "file") MultipartFile file) throws IOException{
|
||||
Task destTask = taskService.getTaskById(destTaskId);
|
||||
Table destRootTable = JSON.toJavaObject(JSON.parseObject(destTask.getConfig()), Config.class).getRootTables().get(destTableName);
|
||||
Map<String, Field> destRootTableFields = destRootTable.getFields();
|
||||
Set<String> destRootTableFieldNameSet = destRootTableFields.keySet();
|
||||
String fileName = file.getOriginalFilename();
|
||||
List<Map<String, String>> result = new ArrayList<>();
|
||||
if(fileName.endsWith(".xls") || fileName.endsWith(".xlsx")){
|
||||
Workbook workbook = new XSSFWorkbook(file.getInputStream());
|
||||
Sheet sheet = workbook.getSheetAt(0);
|
||||
Row firstRow = sheet.getRow(sheet.getFirstRowNum());
|
||||
for(int i = 0; i < firstRow.getLastCellNum(); i++){
|
||||
String cellValue = firstRow.getCell(i).toString();
|
||||
if(!cellValue.toLowerCase().equals(CommonConstant.FILE_PATH)){
|
||||
addFieldNameToList(result, destRootTableFieldNameSet, cellValue);
|
||||
}
|
||||
}
|
||||
return ResultMessage.success(result).toString();
|
||||
}
|
||||
else{
|
||||
return new ResultMessage<>(true, "文件格式不支持", 400).toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 将 .xlsx 或 .xls 文件中数据插入数据库中
|
||||
* @param destTaskId 目标任务 id
|
||||
* @param destTableName 目标表名
|
||||
* @param file .xlsx 或.xls文件
|
||||
* @param fieldMapping 字段映射关系
|
||||
*/
|
||||
@RequestMapping(value = "fileDataMigration", produces = "text/html;charset=UTF-8")
|
||||
public String fileDataMigration(Integer destTaskId, String destTableName,
|
||||
@RequestParam(name = "file") MultipartFile file, String fieldMapping) throws IOException{
|
||||
Task destTask = taskService.getTaskById(destTaskId);
|
||||
String fileName = file.getOriginalFilename();
|
||||
if(fileName.endsWith(".xls") || fileName.endsWith(".xlsx")){
|
||||
Workbook workbook = new XSSFWorkbook(file.getInputStream());
|
||||
Sheet sheet = workbook.getSheetAt(0);
|
||||
importService.fileDataInsert(destTask, destTableName, sheet, fieldMapping);
|
||||
return ResultMessage.success(null).toString();
|
||||
}
|
||||
else{
|
||||
return new ResultMessage<>(true, "文件格式不支持", 400).toString();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取 Shapefile 文件与目标表的字段映射关系!
|
||||
* .shp:存储地理数据的坐标信息。
|
||||
* .shx:存储地理数据的位置索引,记录每个地理数据在 shp 文件中的位置,能够快速定位数据。
|
||||
* .dbf:存储地理数据的属性信息,以 dBase IV 的数据表格式存储。
|
||||
*
|
||||
* @param destTaskId 目标任务 id
|
||||
* @param destTableName 目标表
|
||||
* @param shp shp文件
|
||||
* @param shx shx 文件
|
||||
* @param dbf dbf 文件
|
||||
*/
|
||||
@RequestMapping(value = "getShpAndFieldMapping", produces = "text/html;charset=UTF-8")
|
||||
public String getShpAndFieldMapping(Integer destTaskId, String destTableName,
|
||||
@RequestParam(name = "shp") MultipartFile shp,
|
||||
@RequestParam(name = "shx") MultipartFile shx,
|
||||
@RequestParam(name = "dbf") MultipartFile dbf) throws IOException{
|
||||
if(shp.getOriginalFilename().endsWith(".shp")
|
||||
&& shx.getOriginalFilename().endsWith(".shx")
|
||||
&& dbf.getOriginalFilename().endsWith(".dbf")){
|
||||
String tempDirPath = CommonConstant.TEMP_FILE_PATHNAME + "/" + System.currentTimeMillis() + "/";
|
||||
File tempDir = new File(tempDirPath);
|
||||
tempDir.mkdirs();
|
||||
File shpFile = new File(tempDirPath + "temp.shp");
|
||||
shp.transferTo(shpFile);
|
||||
File shxFile = new File(tempDirPath + "temp.shx");
|
||||
shx.transferTo(shxFile);
|
||||
File dbfFile = new File(tempDirPath + "temp.dbf");
|
||||
dbf.transferTo(dbfFile);
|
||||
|
||||
ShapefileDataStoreFactory factory = new ShapefileDataStoreFactory();
|
||||
ShapefileDataStore dataStore = (ShapefileDataStore) factory.createDataStore(shpFile.toURI().toURL());
|
||||
List<Map<String, String>> result = new ArrayList<>();
|
||||
Task destTask = taskService.getTaskById(destTaskId);
|
||||
Table destRootTable = JSON.toJavaObject(JSON.parseObject(destTask.getConfig()), Config.class).getRootTables().get(destTableName);
|
||||
Map<String, Field> destRootTableFields = destRootTable.getFields();
|
||||
Set<String> destRootTableFieldNameSet = destRootTableFields.keySet();
|
||||
try{
|
||||
if(dataStore != null){
|
||||
// 确定 ShapeFile 编码
|
||||
String shapeFileCoding = OtherUtil.getShpFileCodingByDbf(dbfFile);
|
||||
if(shapeFileCoding == null){
|
||||
throw new RuntimeException(".dbf文件出错,请检查该文件!");
|
||||
}
|
||||
dataStore.setCharset(Charset.forName(shapeFileCoding));
|
||||
List<AttributeDescriptor> attrList = dataStore.getFeatureSource().getSchema().getAttributeDescriptors();
|
||||
for(AttributeDescriptor attr : attrList){
|
||||
if(!attr.getLocalName().toLowerCase().equals(CommonConstant.FILE_PATH)){
|
||||
addFieldNameToList(result, destRootTableFieldNameSet, attr.getLocalName());
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch(Exception e){
|
||||
e.printStackTrace();
|
||||
} finally{
|
||||
if(dataStore != null){
|
||||
dataStore.dispose();
|
||||
}
|
||||
// 将临时文件夹删除
|
||||
if(tempDir.exists()){
|
||||
FileUtils.deleteDirectory(tempDir);
|
||||
}
|
||||
}
|
||||
return ResultMessage.success(result).toString();
|
||||
}
|
||||
else{
|
||||
return new ResultMessage<>(true, "文件格式不支持", 400).toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 将 Shapefile 文件中数据插入数据库中!
|
||||
* @param destTaskId 目标任务 id
|
||||
* @param destTableName 目标表
|
||||
* @param fieldMapping 字段映射关系
|
||||
* @param shp shp文件
|
||||
* @param shx shx 文件
|
||||
* @param dbf dbf 文件
|
||||
*/
|
||||
@RequestMapping(value = "shpDataMigration", produces = "text/html;charset=UTF-8")
|
||||
public String shpDataMigration(Integer destTaskId, String destTableName,String fieldMapping,
|
||||
@RequestParam(name = "shp") MultipartFile shp,
|
||||
@RequestParam(name = "shx") MultipartFile shx,
|
||||
@RequestParam(name = "dbf") MultipartFile dbf) throws IOException{
|
||||
if(shp.getOriginalFilename().endsWith(".shp")
|
||||
&& shx.getOriginalFilename().endsWith(".shx")
|
||||
&& dbf.getOriginalFilename().endsWith(".dbf")){
|
||||
String tempDirPath = CommonConstant.TEMP_FILE_PATHNAME + "/" + System.currentTimeMillis() + "/";
|
||||
File tempDir = new File(tempDirPath);
|
||||
tempDir.mkdirs();
|
||||
File shpFile = new File(tempDirPath + "temp.shp");
|
||||
shp.transferTo(shpFile);
|
||||
File shxFile = new File(tempDirPath + "temp.shx");
|
||||
shx.transferTo(shxFile);
|
||||
File dbfFile = new File(tempDirPath + "temp.dbf");
|
||||
dbf.transferTo(dbfFile);
|
||||
|
||||
//通过store获取featureCollection
|
||||
FileDataStore store = FileDataStoreFinder.getDataStore(shpFile);
|
||||
// 确定 ShapeFile 编码
|
||||
String shapeFileCoding = OtherUtil.getShpFileCodingByDbf(dbfFile);
|
||||
if(shapeFileCoding == null){
|
||||
throw new RuntimeException(".dbf文件出错,请检查该文件!");
|
||||
}
|
||||
((ShapefileDataStore) store).setCharset(Charset.forName(shapeFileCoding));
|
||||
SimpleFeatureSource featureSource = store.getFeatureSource();
|
||||
SimpleFeatureCollection simpleFeatureCollection = featureSource.getFeatures();
|
||||
SimpleFeatureIterator itertor = simpleFeatureCollection.features();
|
||||
Task destTask = taskService.getTaskById(destTaskId);
|
||||
try{
|
||||
importService.shpDataInsert(destTask, destTableName, itertor, fieldMapping,
|
||||
getMediaFilePathNameFromShp(shpFile));
|
||||
}
|
||||
catch(Exception e){
|
||||
e.printStackTrace();
|
||||
return ResultMessage.failed(e.getMessage()).toString();
|
||||
}
|
||||
finally{
|
||||
// 将 SimpleFeatureIterator 和ShapefileDataStore关闭,否则后面删除文件夹会提示shp被占用
|
||||
itertor.close();
|
||||
store.dispose();
|
||||
|
||||
// 将临时文件夹删除
|
||||
if(tempDir.exists()){
|
||||
FileUtils.deleteDirectory(tempDir);
|
||||
}
|
||||
}
|
||||
return ResultMessage.success(null).toString();
|
||||
}
|
||||
else{
|
||||
return new ResultMessage<>(true, "文件格式不支持", 400).toString();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据源字段与目标字段生成 List<Map<String,String>>
|
||||
*/
|
||||
private void addFieldNameToList(List<Map<String, String>> result, Set<String> nameSet, String name){
|
||||
if(nameSet.contains(name)){
|
||||
Map<String, String> tempMap = new HashMap<>();
|
||||
tempMap.put("srcTableField", name);
|
||||
tempMap.put("destTableField", name);
|
||||
result.add(tempMap);
|
||||
}
|
||||
else{
|
||||
Map<String, String> tempMap = new HashMap<>();
|
||||
tempMap.put("srcTableField", name);
|
||||
tempMap.put("destTableField", "");
|
||||
result.add(tempMap);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 从 shp 中获取 filePath 字段名(如果存在的话)
|
||||
*/
|
||||
private String getMediaFilePathNameFromShp(File shpFile) throws IOException{
|
||||
ShapefileDataStoreFactory factory = new ShapefileDataStoreFactory();
|
||||
ShapefileDataStore dataStore = (ShapefileDataStore) factory.createDataStore(shpFile.toURI().toURL());
|
||||
if(dataStore != null){
|
||||
List<AttributeDescriptor> attrList = dataStore.getFeatureSource().getSchema().getAttributeDescriptors();
|
||||
for(AttributeDescriptor attr : attrList){
|
||||
if(attr.getLocalName().toLowerCase().equals(CommonConstant.FILE_PATH)){
|
||||
return attr.getLocalName();
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,173 @@
|
||||
package cn.edu.whu.boot.collection.domain;
|
||||
|
||||
public class ExportMediaRecord {
|
||||
private long mediaID;//多媒体ID
|
||||
|
||||
private long ID;//多媒体对应的父表ID
|
||||
|
||||
private float azimuth;//方向角
|
||||
|
||||
private int satellites;//卫星数
|
||||
|
||||
private double longitude;//经度
|
||||
|
||||
private double latitude;//纬度
|
||||
|
||||
private double altitude;//海拔
|
||||
|
||||
private float accuracy;//精度
|
||||
|
||||
private float cameraAngle;//摄像头方向角
|
||||
|
||||
private float cameraPitch;//摄像头俯仰角
|
||||
|
||||
private float cameraRoll;//摄像头俯仰角
|
||||
|
||||
private String method;//定位方式
|
||||
|
||||
private String time;//拍摄时间
|
||||
|
||||
private float focalLength;//焦距
|
||||
|
||||
private int type;//多媒体类型
|
||||
|
||||
private String mediaPath;
|
||||
|
||||
private int version;
|
||||
|
||||
public long getMediaID() {
|
||||
return mediaID;
|
||||
}
|
||||
|
||||
public void setMediaID(long mediaID) {
|
||||
this.mediaID = mediaID;
|
||||
}
|
||||
|
||||
public long getID() {
|
||||
return ID;
|
||||
}
|
||||
|
||||
public void setID(long ID) {
|
||||
this.ID = ID;
|
||||
}
|
||||
|
||||
public float getAzimuth() {
|
||||
return azimuth;
|
||||
}
|
||||
|
||||
public void setAzimuth(float azimuth) {
|
||||
this.azimuth = azimuth;
|
||||
}
|
||||
|
||||
public int getSatellites() {
|
||||
return satellites;
|
||||
}
|
||||
|
||||
public void setSatellites(int satellites) {
|
||||
this.satellites = satellites;
|
||||
}
|
||||
|
||||
public double getLongitude() {
|
||||
return longitude;
|
||||
}
|
||||
|
||||
public void setLongitude(double longitude) {
|
||||
this.longitude = longitude;
|
||||
}
|
||||
|
||||
public double getLatitude() {
|
||||
return latitude;
|
||||
}
|
||||
|
||||
public void setLatitude(double latitude) {
|
||||
this.latitude = latitude;
|
||||
}
|
||||
|
||||
public double getAltitude() {
|
||||
return altitude;
|
||||
}
|
||||
|
||||
public void setAltitude(double altitude) {
|
||||
this.altitude = altitude;
|
||||
}
|
||||
|
||||
public float getAccuracy() {
|
||||
return accuracy;
|
||||
}
|
||||
|
||||
public void setAccuracy(float accuracy) {
|
||||
this.accuracy = accuracy;
|
||||
}
|
||||
|
||||
public float getCameraAngle() {
|
||||
return cameraAngle;
|
||||
}
|
||||
|
||||
public void setCameraAngle(float cameraAngle) {
|
||||
this.cameraAngle = cameraAngle;
|
||||
}
|
||||
|
||||
public float getCameraPitch() {
|
||||
return cameraPitch;
|
||||
}
|
||||
|
||||
public void setCameraPitch(float cameraPitch) {
|
||||
this.cameraPitch = cameraPitch;
|
||||
}
|
||||
|
||||
public float getCameraRoll() {
|
||||
return cameraRoll;
|
||||
}
|
||||
|
||||
public void setCameraRoll(float cameraRoll) {
|
||||
this.cameraRoll = cameraRoll;
|
||||
}
|
||||
|
||||
public String getMethod() {
|
||||
return method;
|
||||
}
|
||||
|
||||
public void setMethod(String method) {
|
||||
this.method = method;
|
||||
}
|
||||
|
||||
public String getTime() {
|
||||
return time;
|
||||
}
|
||||
|
||||
public void setTime(String time) {
|
||||
this.time = time;
|
||||
}
|
||||
|
||||
public float getFocalLength() {
|
||||
return focalLength;
|
||||
}
|
||||
|
||||
public void setFocalLength(float focalLength) {
|
||||
this.focalLength = focalLength;
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(int type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getMediaPath() {
|
||||
return mediaPath;
|
||||
}
|
||||
|
||||
public void setMediaPath(String mediaPath) {
|
||||
this.mediaPath = mediaPath;
|
||||
}
|
||||
|
||||
public int getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(int version) {
|
||||
this.version = version;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package cn.edu.whu.boot.collection.domain;
|
||||
|
||||
public class ExportUserRecord {
|
||||
private Integer id;
|
||||
|
||||
private String name;
|
||||
|
||||
public ExportUserRecord() {
|
||||
}
|
||||
|
||||
public ExportUserRecord(Integer id, String name) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,225 @@
|
||||
package cn.edu.whu.boot.collection.domain;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* Description:
|
||||
* Author:CXJ
|
||||
* Date: 2019-04-27 12:29
|
||||
* Remark:
|
||||
*/
|
||||
public class MultimediaItem implements Serializable{
|
||||
|
||||
private static final long serialVersionUID = 6456781405975280523L;
|
||||
|
||||
private long mediaID;//多媒体ID
|
||||
private long ID;//多媒体对应的父表ID
|
||||
private String file;//文件名
|
||||
private float azimuth;//方向角
|
||||
private int satellites;//卫星数
|
||||
private double longitude;//经度
|
||||
private double latitude;//纬度
|
||||
private double altitude;//海拔
|
||||
private float accuracy;//精度
|
||||
private float cameraAngle;//摄像头方向角
|
||||
private float cameraPitch;//摄像头俯仰角
|
||||
private float cameraRoll;//摄像头俯仰角
|
||||
private String method;//定位方式
|
||||
private String time;//拍摄时间
|
||||
private float focalLength;//焦距
|
||||
private int type;//多媒体类型
|
||||
private String mediaPath;
|
||||
|
||||
private String mediaTableName;
|
||||
private int version;
|
||||
|
||||
public long getMediaID()
|
||||
{
|
||||
return mediaID;
|
||||
}
|
||||
|
||||
public void setMediaID(long mediaID)
|
||||
{
|
||||
this.mediaID = mediaID;
|
||||
}
|
||||
|
||||
public long getID()
|
||||
{
|
||||
return ID;
|
||||
}
|
||||
|
||||
public void setID(long ID)
|
||||
{
|
||||
this.ID = ID;
|
||||
}
|
||||
|
||||
public String getFile()
|
||||
{
|
||||
return file;
|
||||
}
|
||||
|
||||
public void setFile(String file)
|
||||
{
|
||||
this.file = file;
|
||||
}
|
||||
|
||||
public float getAzimuth()
|
||||
{
|
||||
return azimuth;
|
||||
}
|
||||
|
||||
public void setAzimuth(float azimuth)
|
||||
{
|
||||
this.azimuth = azimuth;
|
||||
}
|
||||
|
||||
public int getSatellites()
|
||||
{
|
||||
return satellites;
|
||||
}
|
||||
|
||||
public void setSatellites(int satellites)
|
||||
{
|
||||
this.satellites = satellites;
|
||||
}
|
||||
|
||||
public double getLongitude()
|
||||
{
|
||||
return longitude;
|
||||
}
|
||||
|
||||
public void setLongitude(double longitude)
|
||||
{
|
||||
this.longitude = longitude;
|
||||
}
|
||||
|
||||
public double getLatitude()
|
||||
{
|
||||
return latitude;
|
||||
}
|
||||
|
||||
public void setLatitude(double latitude)
|
||||
{
|
||||
this.latitude = latitude;
|
||||
}
|
||||
|
||||
public double getAltitude()
|
||||
{
|
||||
return altitude;
|
||||
}
|
||||
|
||||
public void setAltitude(double altitude)
|
||||
{
|
||||
this.altitude = altitude;
|
||||
}
|
||||
|
||||
public float getAccuracy()
|
||||
{
|
||||
return accuracy;
|
||||
}
|
||||
|
||||
public void setAccuracy(float accuracy)
|
||||
{
|
||||
this.accuracy = accuracy;
|
||||
}
|
||||
|
||||
public float getCameraAngle()
|
||||
{
|
||||
return cameraAngle;
|
||||
}
|
||||
|
||||
public void setCameraAngle(float cameraAngle)
|
||||
{
|
||||
this.cameraAngle = cameraAngle;
|
||||
}
|
||||
|
||||
public float getCameraPitch()
|
||||
{
|
||||
return cameraPitch;
|
||||
}
|
||||
|
||||
public void setCameraPitch(float cameraPitch)
|
||||
{
|
||||
this.cameraPitch = cameraPitch;
|
||||
}
|
||||
|
||||
public float getCameraRoll()
|
||||
{
|
||||
return cameraRoll;
|
||||
}
|
||||
|
||||
public void setCameraRoll(float cameraRoll)
|
||||
{
|
||||
this.cameraRoll = cameraRoll;
|
||||
}
|
||||
|
||||
public String getMethod()
|
||||
{
|
||||
return method;
|
||||
}
|
||||
|
||||
public void setMethod(String method)
|
||||
{
|
||||
this.method = method;
|
||||
}
|
||||
|
||||
public String getTime()
|
||||
{
|
||||
return time;
|
||||
}
|
||||
|
||||
public void setTime(String time)
|
||||
{
|
||||
this.time = time;
|
||||
}
|
||||
|
||||
public float getFocalLength()
|
||||
{
|
||||
return focalLength;
|
||||
}
|
||||
|
||||
public void setFocalLength(float focalLength)
|
||||
{
|
||||
this.focalLength = focalLength;
|
||||
}
|
||||
|
||||
public int getType()
|
||||
{
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(int type)
|
||||
{
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getMediaPath()
|
||||
{
|
||||
return mediaPath;
|
||||
}
|
||||
|
||||
public void setMediaPath(String mediaPath)
|
||||
{
|
||||
this.mediaPath = mediaPath;
|
||||
}
|
||||
|
||||
public String getMediaTableName()
|
||||
{
|
||||
return mediaTableName;
|
||||
}
|
||||
|
||||
public void setMediaTableName(String mediaTableName)
|
||||
{
|
||||
this.mediaTableName = mediaTableName;
|
||||
}
|
||||
|
||||
public int getVersion()
|
||||
{
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(int version)
|
||||
{
|
||||
this.version = version;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
package cn.edu.whu.boot.collection.domain;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 对应Postgresql 数据库public模式的task_select_id表,记录已经抽查的数据id
|
||||
*/
|
||||
public class TaskSelectId implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -5478907386502727663L;
|
||||
|
||||
private Long id;
|
||||
private Integer srcTaskId;
|
||||
private String srcTableName;
|
||||
private Integer selectOrder;
|
||||
private String selectId;
|
||||
private Integer destTaskId;
|
||||
private String destTableName;
|
||||
|
||||
public Long getId ()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId (Long id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Integer getSrcTaskId ()
|
||||
{
|
||||
return srcTaskId;
|
||||
}
|
||||
|
||||
public void setSrcTaskId (Integer srcTaskId)
|
||||
{
|
||||
this.srcTaskId = srcTaskId;
|
||||
}
|
||||
|
||||
public String getSrcTableName ()
|
||||
{
|
||||
return srcTableName;
|
||||
}
|
||||
|
||||
public void setSrcTableName (String srcTableName)
|
||||
{
|
||||
this.srcTableName = srcTableName;
|
||||
}
|
||||
|
||||
public Integer getDestTaskId ()
|
||||
{
|
||||
return destTaskId;
|
||||
}
|
||||
|
||||
public void setDestTaskId (Integer destTaskId)
|
||||
{
|
||||
this.destTaskId = destTaskId;
|
||||
}
|
||||
|
||||
public String getDestTableName ()
|
||||
{
|
||||
return destTableName;
|
||||
}
|
||||
|
||||
public void setDestTableName (String destTableName)
|
||||
{
|
||||
this.destTableName = destTableName;
|
||||
}
|
||||
|
||||
public Integer getSelectOrder ()
|
||||
{
|
||||
return selectOrder;
|
||||
}
|
||||
|
||||
public void setSelectOrder (Integer selectOrder)
|
||||
{
|
||||
this.selectOrder = selectOrder;
|
||||
}
|
||||
|
||||
public String getSelectId ()
|
||||
{
|
||||
return selectId;
|
||||
}
|
||||
|
||||
public void setSelectId (String selectId)
|
||||
{
|
||||
this.selectId = selectId;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package cn.edu.whu.boot.collection.dto;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 联合主键类,主要是方便返回数据给移动端
|
||||
*/
|
||||
public class CompositeKey implements Serializable{
|
||||
|
||||
private static final long serialVersionUID = 6604820802345592864L;
|
||||
|
||||
/**
|
||||
* 数据的主键
|
||||
*/
|
||||
private Long polygonId;
|
||||
/**
|
||||
* 数据的版本
|
||||
*/
|
||||
private int version;
|
||||
|
||||
public Long getPolygonId(){
|
||||
return polygonId;
|
||||
}
|
||||
|
||||
public void setPolygonId(Long polygonId){
|
||||
this.polygonId = polygonId;
|
||||
}
|
||||
|
||||
public int getVersion(){
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(int version){
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(){
|
||||
return JSON.toJSONString(this);
|
||||
}
|
||||
}
|
||||
47
src/main/java/cn/edu/whu/boot/collection/dto/Feature.java
Normal file
47
src/main/java/cn/edu/whu/boot/collection/dto/Feature.java
Normal file
@@ -0,0 +1,47 @@
|
||||
package cn.edu.whu.boot.collection.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 定义一个 Feature 类,主要是方便返回数据给决策管理前端
|
||||
*/
|
||||
public class Feature implements Serializable{
|
||||
|
||||
private static final long serialVersionUID = 6787141434245062521L;
|
||||
|
||||
private String type;
|
||||
|
||||
private GeometryType geometry;
|
||||
|
||||
private Object properties;
|
||||
|
||||
public String getType()
|
||||
{
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type)
|
||||
{
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public GeometryType getGeometry()
|
||||
{
|
||||
return geometry;
|
||||
}
|
||||
|
||||
public void setGeometry(GeometryType geometry)
|
||||
{
|
||||
this.geometry = geometry;
|
||||
}
|
||||
|
||||
public Object getProperties()
|
||||
{
|
||||
return properties;
|
||||
}
|
||||
|
||||
public void setProperties(Object properties)
|
||||
{
|
||||
this.properties = properties;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package cn.edu.whu.boot.collection.dto;
|
||||
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 定义一个 GeometryType 类型,与 Feature 类使用用于标记不同 geometry 类型
|
||||
*/
|
||||
public class GeometryType implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 6477009511765851104L;
|
||||
|
||||
private String type;
|
||||
|
||||
private Object coordinates;
|
||||
|
||||
public String getType()
|
||||
{
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type)
|
||||
{
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public Object getCoordinates()
|
||||
{
|
||||
return coordinates;
|
||||
}
|
||||
|
||||
public void setCoordinates(Object coordinates)
|
||||
{
|
||||
this.coordinates = coordinates;
|
||||
}
|
||||
}
|
||||
44
src/main/java/cn/edu/whu/boot/collection/dto/SqlEnity.java
Normal file
44
src/main/java/cn/edu/whu/boot/collection/dto/SqlEnity.java
Normal file
@@ -0,0 +1,44 @@
|
||||
package cn.edu.whu.boot.collection.dto;
|
||||
|
||||
/**
|
||||
* 封装sqlString的类,因为不涉及具体的JavaBean,通过该类获取插入记录的自增长id号
|
||||
*/
|
||||
public class SqlEnity {
|
||||
|
||||
private Long id;
|
||||
private String sql;
|
||||
private String primaryKeySeq;
|
||||
|
||||
public SqlEnity()
|
||||
{}
|
||||
|
||||
public Long getId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getSql()
|
||||
{
|
||||
return sql;
|
||||
}
|
||||
|
||||
public void setSql(String sql)
|
||||
{
|
||||
this.sql = sql;
|
||||
}
|
||||
|
||||
public String getPrimaryKeySeq()
|
||||
{
|
||||
return primaryKeySeq;
|
||||
}
|
||||
|
||||
public void setPrimaryKeySeq(String primaryKeySeq)
|
||||
{
|
||||
this.primaryKeySeq = primaryKeySeq;
|
||||
}
|
||||
}
|
||||
149
src/main/java/cn/edu/whu/boot/collection/dto/WebLog.java
Normal file
149
src/main/java/cn/edu/whu/boot/collection/dto/WebLog.java
Normal file
@@ -0,0 +1,149 @@
|
||||
package cn.edu.whu.boot.collection.dto;
|
||||
|
||||
/**
|
||||
* Controller 层的日志封装类
|
||||
*/
|
||||
public class WebLog {
|
||||
/**
|
||||
* 操作描述
|
||||
*/
|
||||
private String description;
|
||||
|
||||
/**
|
||||
* 操作用户
|
||||
*/
|
||||
private String username;
|
||||
|
||||
/**
|
||||
* 操作时间
|
||||
*/
|
||||
private Long startTime;
|
||||
|
||||
/**
|
||||
* 消耗时间
|
||||
*/
|
||||
private Integer spendTime;
|
||||
|
||||
/**
|
||||
* 根路径
|
||||
*/
|
||||
private String basePath;
|
||||
|
||||
/**
|
||||
* URI
|
||||
*/
|
||||
private String uri;
|
||||
|
||||
/**
|
||||
* URL
|
||||
*/
|
||||
private String url;
|
||||
|
||||
/**
|
||||
* 请求类型
|
||||
*/
|
||||
private String method;
|
||||
|
||||
/**
|
||||
* IP地址
|
||||
*/
|
||||
private String ip;
|
||||
|
||||
/**
|
||||
* 请求参数
|
||||
*/
|
||||
private Object parameter;
|
||||
|
||||
/**
|
||||
* 请求返回的结果
|
||||
*/
|
||||
private Object result;
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
public Long getStartTime() {
|
||||
return startTime;
|
||||
}
|
||||
|
||||
public void setStartTime(Long startTime) {
|
||||
this.startTime = startTime;
|
||||
}
|
||||
|
||||
public Integer getSpendTime() {
|
||||
return spendTime;
|
||||
}
|
||||
|
||||
public void setSpendTime(Integer spendTime) {
|
||||
this.spendTime = spendTime;
|
||||
}
|
||||
|
||||
public String getBasePath() {
|
||||
return basePath;
|
||||
}
|
||||
|
||||
public void setBasePath(String basePath) {
|
||||
this.basePath = basePath;
|
||||
}
|
||||
|
||||
public String getUri() {
|
||||
return uri;
|
||||
}
|
||||
|
||||
public void setUri(String uri) {
|
||||
this.uri = uri;
|
||||
}
|
||||
|
||||
public String getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
public void setUrl(String url) {
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
public String getMethod() {
|
||||
return method;
|
||||
}
|
||||
|
||||
public void setMethod(String method) {
|
||||
this.method = method;
|
||||
}
|
||||
|
||||
public String getIp() {
|
||||
return ip;
|
||||
}
|
||||
|
||||
public void setIp(String ip) {
|
||||
this.ip = ip;
|
||||
}
|
||||
|
||||
public Object getParameter() {
|
||||
return parameter;
|
||||
}
|
||||
|
||||
public void setParameter(Object parameter) {
|
||||
this.parameter = parameter;
|
||||
}
|
||||
|
||||
public Object getResult() {
|
||||
return result;
|
||||
}
|
||||
|
||||
public void setResult(Object result) {
|
||||
this.result = result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
package cn.edu.whu.boot.collection.mapper;
|
||||
|
||||
import cn.edu.whu.boot.collection.dto.SqlEnity;
|
||||
import com.github.pagehelper.Page;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 插入数据字段不固定,所以定义一个基础 Mapper 接口
|
||||
*/
|
||||
@Repository
|
||||
public interface BaseMapper {
|
||||
|
||||
Integer insertSql(@Param("insertSql") String insertSql);
|
||||
|
||||
Integer insertSqlEnity(@Param("sqlEnity") SqlEnity sqlEnity);
|
||||
|
||||
Integer getVersionByPolygonId(@Param("tableName") String tableName , @Param("primaryKeyName") String primaryKeyName ,
|
||||
@Param("primaryKeyValue") Long primaryKeyValue);
|
||||
|
||||
List<Map<String,Object>> selectData(@Param("selectSql") String selectSql);
|
||||
|
||||
Integer getUserWorkRole(@Param("taskId") Integer taskId , @Param("userId") Integer userId);
|
||||
|
||||
List<Map<String,Object>> getNotPassDataId(@Param("tableNameInDb") String tableNameInDb ,
|
||||
@Param("primaryKey") String primaryKey , @Param("userId") Integer userId);
|
||||
Long getStatisticDataNum(@Param("tableNameInDb") String tableNameInDb, @Param("geometryName")String geometryName,
|
||||
@Param("geoJson")String geoJson);
|
||||
|
||||
Long getDataCount(@Param("tableNameInDb") String tableNameInDb);
|
||||
|
||||
Long getHasCollectAndPatrolDataCount(@Param("tableNameInDb") String tableNameInDb);
|
||||
|
||||
List<Map<String,Object>> getDataCountAndTimeByUser(@Param("tableNameInDb") String tableNameInDb,
|
||||
@Param("userId") Integer userId);
|
||||
List<Map<String,Object>> getAllFuzzySearchData(@Param("tableNameInDb") String tableNameInDb,
|
||||
@Param("fieldNameInDB") String fieldNameInDB,
|
||||
@Param("searchKey") String searchKey);
|
||||
Page<Map<String,Object>> getAllFuzzySearchDataCenterPoint(@Param("tableNameInDb") String tableNameInDb,
|
||||
@Param("fieldNameInDB") String fieldNameInDB,
|
||||
@Param("geometryFieldNameInDB") String geometryFieldNameInDB,
|
||||
@Param("searchKey") String searchKey);
|
||||
|
||||
List<Map<String,Object>> randomSelectDataIdNotInList(@Param("tableNameInDb") String tableNameInDb,
|
||||
@Param("primaryKey") String primaryKey,
|
||||
@Param("selectIdList") List selectIdList,
|
||||
@Param("selectDataNum") Integer selectDataNum,
|
||||
@Param("whereClause") String whereClause);
|
||||
|
||||
List<Integer> getIdsByReviewer(@Param("tableNameInDb")String tableNameInDb, @Param("reviewerId")int reviewerId,
|
||||
@Param("primaryKey") String primaryKey);
|
||||
|
||||
Integer getReviewerByDataId(@Param("tableNameInDb")String tableNameInDb, @Param("primaryKey") String primaryKey,
|
||||
@Param("dataId")int dataId);
|
||||
/**
|
||||
* 查询指定表的所有字段名
|
||||
* @param tableName 表名
|
||||
* @return 字段名列表
|
||||
*/
|
||||
List<String> selectSingleColumn(@Param("databaseName") String databaseName,
|
||||
@Param("tableName") String tableName);
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user