kerry 5 年之前
當前提交
eea9a4c7c8
共有 86 個文件被更改,包括 3220 次插入0 次删除
  1. 9 0
      .gitignore
  2. 12 0
      README.md
  3. 15 0
      common/pom.xml
  4. 18 0
      common/src/main/java/com/vcarecity/elastic/constants/ElasticConstant.java
  5. 36 0
      common/src/main/java/com/vcarecity/elastic/util/AgencyPathUtil.java
  6. 9 0
      elastic-load-data/config/application-dev.yml
  7. 9 0
      elastic-load-data/config/application-production.yml
  8. 9 0
      elastic-load-data/config/application-test.yml
  9. 3 0
      elastic-load-data/config/application.yml
  10. 115 0
      elastic-load-data/pom.xml
  11. 50 0
      elastic-load-data/src/main/java/com/vcarecity/test/HighClientApp.java
  12. 15 0
      elastic-load-data/src/main/java/com/vcarecity/test/core/ObjectResultWrapper.java
  13. 38 0
      elastic-load-data/src/main/java/com/vcarecity/test/core/ReflectionUtil.java
  14. 37 0
      elastic-load-data/src/main/java/com/vcarecity/test/core/ResultMapper.java
  15. 17 0
      elastic-load-data/src/main/java/com/vcarecity/test/entity/AgencyEntity.java
  16. 16 0
      elastic-load-data/src/main/java/com/vcarecity/test/entity/UnitAgencyDetailEntity.java
  17. 43 0
      elastic-load-data/src/main/java/com/vcarecity/test/entity/UnitAgencyEntity.java
  18. 8 0
      elastic-load-data/src/main/java/com/vcarecity/test/mapper/TestMapper.java
  19. 103 0
      elastic-load-data/src/main/java/com/vcarecity/test/module/DbModule.java
  20. 29 0
      elastic-load-data/src/main/java/com/vcarecity/test/module/PropertiesModule.java
  21. 16 0
      elastic-load-data/src/main/java/com/vcarecity/test/module/ServiceModule.java
  22. 14 0
      elastic-load-data/src/main/java/com/vcarecity/test/properties/ConfigProperties.java
  23. 14 0
      elastic-load-data/src/main/java/com/vcarecity/test/properties/DbProperties.java
  24. 15 0
      elastic-load-data/src/main/java/com/vcarecity/test/properties/ElasticProperties.java
  25. 23 0
      elastic-load-data/src/main/java/com/vcarecity/test/repository/AgencyRepository.java
  26. 53 0
      elastic-load-data/src/main/java/com/vcarecity/test/repository/impl/AgencyRepositoryImpl.java
  27. 24 0
      elastic-load-data/src/main/java/com/vcarecity/test/service/AgencyService.java
  28. 21 0
      elastic-load-data/src/main/java/com/vcarecity/test/service/ElasticSaveService.java
  29. 23 0
      elastic-load-data/src/main/java/com/vcarecity/test/service/ObtainDataService.java
  30. 22 0
      elastic-load-data/src/main/java/com/vcarecity/test/service/QueryDataService.java
  31. 105 0
      elastic-load-data/src/main/java/com/vcarecity/test/service/elastic/ElasticSaveServiceImpl.java
  32. 83 0
      elastic-load-data/src/main/java/com/vcarecity/test/service/elastic/QueryDataServiceImpl.java
  33. 43 0
      elastic-load-data/src/main/java/com/vcarecity/test/service/oracle/AgencyServiceImpl.java
  34. 127 0
      elastic-load-data/src/main/java/com/vcarecity/test/service/oracle/OracleObtainDataServiceImpl.java
  35. 76 0
      elastic-load-data/src/main/java/com/vcarecity/test/task/ImportTask.java
  36. 80 0
      elastic-load-data/src/main/java/com/vcarecity/test/typehandler/AutoTypeHandler.java
  37. 33 0
      elastic-load-data/src/main/java/com/vcarecity/test/typehandler/TypeHandler.java
  38. 18 0
      elastic-load-data/src/main/java/com/vcarecity/test/typehandler/TypeParam.java
  39. 119 0
      elastic-load-data/src/main/java/com/vcarecity/test/util/SnowFlake.java
  40. 1 0
      elastic-load-data/src/main/lombok.config
  41. 38 0
      elastic-load-data/src/main/resources/logback-test.xml
  42. 13 0
      elastic-load-data/src/test/java/com/vcarecity/test/module/DbModuleTest.java
  43. 24 0
      elastic-load-data/src/test/java/com/vcarecity/test/service/elastic/QueryDataServiceImplTest.java
  44. 24 0
      elastic-load-data/src/test/java/com/vcarecity/test/service/oracle/AgencyServiceImplTest.java
  45. 37 0
      elastic-load-data/src/test/java/com/vcarecity/test/service/oracle/OracleObtainDataServiceImplTest.java
  46. 1 0
      elastic-load-data/src/test/lombok.config
  47. 80 0
      elastic-publish-service/pom.xml
  48. 5 0
      elastic-publish-service/req/http-client.env.json
  49. 24 0
      elastic-publish-service/req/main-controller.http
  50. 19 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/ElasticPublishApplication.java
  51. 56 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/config/ElasticConfig.java
  52. 25 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/config/MapperConfig.java
  53. 42 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/controller/MainController.java
  54. 18 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/controller/TestController.java
  55. 16 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/entity/AgencyEntity.java
  56. 14 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/entity/BuildingEntity.java
  57. 33 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/entity/UnitAgencyMergeEntity.java
  58. 15 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/entity/UnitEntity.java
  59. 38 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/mapper/AgencyMapper.java
  60. 27 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/mapper/BuildingMapper.java
  61. 38 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/mapper/UnitMapper.java
  62. 15 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/pojo/dto/UnitAgencyDTO.java
  63. 26 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/pojo/query/UnitAgencyQuery.java
  64. 26 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/service/CheckTimeService.java
  65. 12 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/service/QueryElasticService.java
  66. 27 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/service/UnitService.java
  67. 22 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/service/UpdateElasticService.java
  68. 38 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/service/impl/CheckTimeServiceImpl.java
  69. 18 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/service/impl/QueryElasticServiceImpl.java
  70. 304 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/service/impl/UnitServiceImpl.java
  71. 114 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/service/impl/UpdateElasticServiceImpl.java
  72. 65 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/task/CheckUpdateTask.java
  73. 12 0
      elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/util/DateUtil.java
  74. 1 0
      elastic-publish-service/src/main/lombok.config
  75. 24 0
      elastic-publish-service/src/main/resources/application-dev.yml
  76. 3 0
      elastic-publish-service/src/main/resources/application.yml
  77. 51 0
      elastic-publish-service/src/main/resources/mapper/AgencyMapper.xml
  78. 15 0
      elastic-publish-service/src/main/resources/mapper/BuildingMapper.xml
  79. 49 0
      elastic-publish-service/src/main/resources/mapper/UnitMapper.xml
  80. 29 0
      elastic-publish-service/src/test/java/com/vcarecity/elastic/publish/mapper/AgencyMapperTest.java
  81. 20 0
      elastic-publish-service/src/test/java/com/vcarecity/elastic/publish/mapper/BuildingMapperTest.java
  82. 33 0
      elastic-publish-service/src/test/java/com/vcarecity/elastic/publish/mapper/UnitMapperTest.java
  83. 35 0
      elastic-publish-service/src/test/java/com/vcarecity/elastic/publish/service/impl/UnitServiceImplTest.java
  84. 21 0
      elastic-publish-service/src/test/java/com/vcarecity/elastic/publish/service/impl/UpdateElasticServiceImplTest.java
  85. 1 0
      elastic-publish-service/src/test/lombok.config
  86. 171 0
      pom.xml

+ 9 - 0
.gitignore 查看文件

@@ -0,0 +1,9 @@
1
+.idea/
2
+target/
3
+logs/
4
+build/
5
+
6
+*.log
7
+*.class
8
+*.jar
9
+*.iml

+ 12 - 0
README.md 查看文件

@@ -0,0 +1,12 @@
1
+https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-document-delete-by-query.html
2
+
3
+
4
+
5
+https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-document-update.html
6
+
7
+
8
+
9
+https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-document-delete.html
10
+
11
+
12
+https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-document-update-by-query.html

+ 15 - 0
common/pom.xml 查看文件

@@ -0,0 +1,15 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <parent>
6
+        <artifactId>elastic-data-test</artifactId>
7
+        <groupId>com.vcarecity.test.data</groupId>
8
+        <version>1.0.0</version>
9
+    </parent>
10
+    <modelVersion>4.0.0</modelVersion>
11
+
12
+    <artifactId>common</artifactId>
13
+
14
+
15
+</project>

+ 18 - 0
common/src/main/java/com/vcarecity/elastic/constants/ElasticConstant.java 查看文件

@@ -0,0 +1,18 @@
1
+package com.vcarecity.elastic.constants;
2
+
3
+import java.time.format.DateTimeFormatter;
4
+
5
+/**
6
+ * @author Kerry on 19/12/10
7
+ */
8
+
9
+public class ElasticConstant {
10
+
11
+    public static final String ES_DATE_TIME = "yyyy/MM/dd HH:mm:ss";
12
+    public static final String ES_DATE = "yyyy/MM/dd";
13
+
14
+    public static final DateTimeFormatter ES_DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern(ES_DATE_TIME);
15
+    public static final DateTimeFormatter ES_DATE_FORMATTER = DateTimeFormatter.ofPattern(ES_DATE);
16
+
17
+    public static final String ES_AGENCY_ID_PREFIX = "aId";
18
+}

+ 36 - 0
common/src/main/java/com/vcarecity/elastic/util/AgencyPathUtil.java 查看文件

@@ -0,0 +1,36 @@
1
+package com.vcarecity.elastic.util;
2
+
3
+
4
+import com.vcarecity.elastic.constants.ElasticConstant;
5
+
6
+import java.util.ArrayList;
7
+import java.util.LinkedHashMap;
8
+import java.util.List;
9
+import java.util.Map;
10
+
11
+/**
12
+ * @author Kerry on 19/12/10
13
+ */
14
+
15
+public class AgencyPathUtil {
16
+    public static List<Integer> splitAgencyId(String agencyPath) {
17
+        final String[] split = agencyPath.split("/");
18
+        List<Integer> list = new ArrayList<>(split.length);
19
+
20
+        for (String s : split) {
21
+            if (!"".equals(s.trim())) {
22
+                list.add(Integer.parseInt(s.trim()));
23
+            }
24
+        }
25
+
26
+        return list;
27
+    }
28
+
29
+    public static Map<String, Integer> agencyPathQueryMap(List<Integer> list) {
30
+        Map<String, Integer> agencyPathCondition = new LinkedHashMap<>(list.size());
31
+        for (int i = 0; i < list.size(); i++) {
32
+            agencyPathCondition.put(ElasticConstant.ES_AGENCY_ID_PREFIX + i, list.get(i));
33
+        }
34
+        return agencyPathCondition;
35
+    }
36
+}

+ 9 - 0
elastic-load-data/config/application-dev.yml 查看文件

@@ -0,0 +1,9 @@
1
+database:
2
+  url: jdbc:oracle:thin:@192.168.10.112:1521:orcl
3
+  user: C##FMMP
4
+  password: vcare~1(^_^)
5
+elasticsearch:
6
+  host: 192.168.10.241:9200,192.168.10.242:9200,192.168.10.243:9200
7
+  schema: http
8
+  user: elastic
9
+  password: abcd!234

+ 9 - 0
elastic-load-data/config/application-production.yml 查看文件

@@ -0,0 +1,9 @@
1
+database:
2
+  url: jdbc:oracle:thin:@112.74.206.100:15223:orcl
3
+  user: C##FMMP
4
+  password: vcare~1(^_^)
5
+elasticsearch:
6
+  host: 192.168.10.241:9200,192.168.10.242:9200,192.168.10.243:9200
7
+  schema: http
8
+  user: elastic
9
+  password: abcd!234

+ 9 - 0
elastic-load-data/config/application-test.yml 查看文件

@@ -0,0 +1,9 @@
1
+database:
2
+  url: jdbc:oracle:thin:@192.168.10.236:1521:orcl
3
+  user: C##FMMP
4
+  password: vcare~1(^_^)
5
+elasticsearch:
6
+  host: 192.168.10.241:9200,192.168.10.242:9200,192.168.10.243:9200
7
+  schema: http
8
+  user: elastic
9
+  password: abcd!234

+ 3 - 0
elastic-load-data/config/application.yml 查看文件

@@ -0,0 +1,3 @@
1
+profile:
2
+  active: dev
3
+#  active: production

+ 115 - 0
elastic-load-data/pom.xml 查看文件

@@ -0,0 +1,115 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <parent>
6
+        <artifactId>elastic-data-test</artifactId>
7
+        <groupId>com.vcarecity.test.data</groupId>
8
+        <version>1.0.0</version>
9
+    </parent>
10
+    <modelVersion>4.0.0</modelVersion>
11
+
12
+    <artifactId>elastic-load-data</artifactId>
13
+
14
+
15
+    <dependencies>
16
+
17
+        <dependency>
18
+            <groupId>com.vcarecity.test.data</groupId>
19
+            <artifactId>common</artifactId>
20
+        </dependency>
21
+
22
+        <dependency>
23
+            <groupId>org.elasticsearch.client</groupId>
24
+            <artifactId>elasticsearch-rest-high-level-client</artifactId>
25
+        </dependency>
26
+
27
+        <dependency>
28
+            <groupId>org.slf4j</groupId>
29
+            <artifactId>slf4j-api</artifactId>
30
+        </dependency>
31
+        <dependency>
32
+            <groupId>org.slf4j</groupId>
33
+            <artifactId>log4j-over-slf4j</artifactId>
34
+        </dependency>
35
+        <dependency>
36
+            <groupId>org.apache.logging.log4j</groupId>
37
+            <artifactId>log4j-to-slf4j</artifactId>
38
+        </dependency>
39
+
40
+        <dependency>
41
+            <groupId>ch.qos.logback</groupId>
42
+            <artifactId>logback-classic</artifactId>
43
+        </dependency>
44
+        <dependency>
45
+            <groupId>org.projectlombok</groupId>
46
+            <artifactId>lombok</artifactId>
47
+            <scope>provided</scope>
48
+        </dependency>
49
+        <dependency>
50
+            <groupId>org.junit.jupiter</groupId>
51
+            <artifactId>junit-jupiter-api</artifactId>
52
+            <scope>test</scope>
53
+        </dependency>
54
+        <dependency>
55
+            <groupId>com.google.inject</groupId>
56
+            <artifactId>guice</artifactId>
57
+        </dependency>
58
+        <dependency>
59
+            <groupId>com.google.inject.extensions</groupId>
60
+            <artifactId>guice-assistedinject</artifactId>
61
+        </dependency>
62
+        <dependency>
63
+            <groupId>me.yuxiaoyao.lang</groupId>
64
+            <artifactId>configuration-loader</artifactId>
65
+        </dependency>
66
+        <dependency>
67
+            <groupId>com.fasterxml.jackson.core</groupId>
68
+            <artifactId>jackson-databind</artifactId>
69
+        </dependency>
70
+        <dependency>
71
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
72
+            <artifactId>jackson-dataformat-yaml</artifactId>
73
+        </dependency>
74
+
75
+
76
+        <dependency>
77
+            <groupId>com.google.guava</groupId>
78
+            <artifactId>guava</artifactId>
79
+        </dependency>
80
+        <dependency>
81
+            <groupId>oracle.jdbc</groupId>
82
+            <artifactId>ojdbc8</artifactId>
83
+        </dependency>
84
+
85
+        <dependency>
86
+            <groupId>com.zaxxer</groupId>
87
+            <artifactId>HikariCP</artifactId>
88
+        </dependency>
89
+        <dependency>
90
+            <groupId>javax.persistence</groupId>
91
+            <artifactId>persistence-api</artifactId>
92
+        </dependency>
93
+
94
+        <dependency>
95
+            <groupId>cglib</groupId>
96
+            <artifactId>cglib</artifactId>
97
+        </dependency>
98
+
99
+    </dependencies>
100
+
101
+    <build>
102
+        <plugins>
103
+            <plugin>
104
+                <groupId>org.apache.maven.plugins</groupId>
105
+                <artifactId>maven-compiler-plugin</artifactId>
106
+                <configuration>
107
+                    <source>8</source>
108
+                    <target>8</target>
109
+                </configuration>
110
+            </plugin>
111
+        </plugins>
112
+    </build>
113
+
114
+
115
+</project>

+ 50 - 0
elastic-load-data/src/main/java/com/vcarecity/test/HighClientApp.java 查看文件

@@ -0,0 +1,50 @@
1
+package com.vcarecity.test;
2
+
3
+import com.google.inject.Guice;
4
+import com.google.inject.Injector;
5
+import com.vcarecity.test.module.DbModule;
6
+import com.vcarecity.test.module.PropertiesModule;
7
+import com.vcarecity.test.module.ServiceModule;
8
+import com.vcarecity.test.properties.ConfigProperties;
9
+import com.vcarecity.test.task.ImportTask;
10
+import me.yuxiaoyao.config.loader.ConfigLoader;
11
+
12
+/**
13
+ * @author Kerry on 19/12/09
14
+ */
15
+
16
+public class HighClientApp {
17
+
18
+    public static Injector injector;
19
+
20
+    public static void main(String[] args) {
21
+        run(args);
22
+        final ImportTask instance = injector.getInstance(ImportTask.class);
23
+        instance.startTask();
24
+
25
+        instance.stopApp();
26
+    }
27
+
28
+    public static void run(String[] args) {
29
+        final ConfigProperties configProperties = loadProperties(args);
30
+        injector = createInjector(configProperties);
31
+    }
32
+
33
+    public static ConfigProperties loadProperties(String[] args) {
34
+        return ConfigLoader.parseConfig(args, ConfigProperties.class, null);
35
+    }
36
+
37
+    public static Injector createInjector() {
38
+        return createInjector(null);
39
+    }
40
+
41
+    public static Injector createInjector(ConfigProperties configProperties) {
42
+        return Guice.createInjector(
43
+                new PropertiesModule(configProperties),
44
+                new DbModule(),
45
+                new ServiceModule()
46
+        );
47
+    }
48
+
49
+
50
+}

+ 15 - 0
elastic-load-data/src/main/java/com/vcarecity/test/core/ObjectResultWrapper.java 查看文件

@@ -0,0 +1,15 @@
1
+package com.vcarecity.test.core;
2
+
3
+import lombok.Data;
4
+
5
+import java.util.List;
6
+
7
+/**
8
+ * @author Kerry on 19/12/09
9
+ */
10
+
11
+@Data
12
+public class ObjectResultWrapper<T> {
13
+    private String[] headers;
14
+    private List<T> dataList;
15
+}

+ 38 - 0
elastic-load-data/src/main/java/com/vcarecity/test/core/ReflectionUtil.java 查看文件

@@ -0,0 +1,38 @@
1
+package com.vcarecity.test.core;
2
+
3
+import com.vcarecity.test.typehandler.TypeParam;
4
+
5
+import javax.persistence.Column;
6
+import java.lang.reflect.Field;
7
+import java.util.ArrayList;
8
+import java.util.List;
9
+
10
+/**
11
+ * @author Kerry on 19/12/10
12
+ */
13
+
14
+public class ReflectionUtil {
15
+
16
+    public static <T> List<TypeParam> reflectOrmClass(Class<T> cls) {
17
+        Field[] declaredFields = cls.getDeclaredFields();
18
+
19
+        List<TypeParam> list = new ArrayList<>(declaredFields.length);
20
+
21
+        for (Field field : declaredFields) {
22
+            final Column column = field.getAnnotation(Column.class);
23
+            String columnName;
24
+            if (column == null) {
25
+                columnName = field.getName();
26
+            } else {
27
+                columnName = column.name();
28
+            }
29
+            final TypeParam typeParam = new TypeParam();
30
+            typeParam.setColumnName(columnName);
31
+            typeParam.setField(field);
32
+            list.add(typeParam);
33
+        }
34
+        return list;
35
+
36
+    }
37
+
38
+}

+ 37 - 0
elastic-load-data/src/main/java/com/vcarecity/test/core/ResultMapper.java 查看文件

@@ -0,0 +1,37 @@
1
+package com.vcarecity.test.core;
2
+
3
+import java.sql.ResultSet;
4
+import java.sql.ResultSetMetaData;
5
+import java.sql.SQLException;
6
+import java.util.ArrayList;
7
+import java.util.List;
8
+
9
+/**
10
+ * @author Kerry on 19/12/09
11
+ */
12
+
13
+public class ResultMapper {
14
+    public static ObjectResultWrapper<Object[]> getResultSet(ResultSet rs) throws SQLException {
15
+        final ResultSetMetaData metaData = rs.getMetaData();
16
+        final int columnCount = metaData.getColumnCount();
17
+        String[] headers = new String[columnCount];
18
+        for (int i = 0; i < columnCount; i++) {
19
+            headers[i] = metaData.getColumnName(i + 1);
20
+        }
21
+        ObjectResultWrapper<Object[]> resultWrapper = new ObjectResultWrapper<>();
22
+        resultWrapper.setHeaders(headers);
23
+
24
+        List<Object[]> result = new ArrayList<>();
25
+        int index = 0;
26
+        while (rs.next()) {
27
+            Object[] columns = new Object[columnCount];
28
+            for (int i = 0; i < columnCount; i++) {
29
+                columns[i] = rs.getObject(i + 1);
30
+            }
31
+            result.add(columns);
32
+        }
33
+        resultWrapper.setDataList(result);
34
+        return resultWrapper;
35
+    }
36
+
37
+}

+ 17 - 0
elastic-load-data/src/main/java/com/vcarecity/test/entity/AgencyEntity.java 查看文件

@@ -0,0 +1,17 @@
1
+package com.vcarecity.test.entity;
2
+
3
+import lombok.Data;
4
+
5
+import javax.persistence.Column;
6
+import javax.persistence.Entity;
7
+
8
+/**
9
+ * @author Kerry on 19/12/10
10
+ */
11
+
12
+@Entity
13
+@Data
14
+public class AgencyEntity {
15
+    @Column(name = "AGENCY_NAME")
16
+    private String agencyName;
17
+}

+ 16 - 0
elastic-load-data/src/main/java/com/vcarecity/test/entity/UnitAgencyDetailEntity.java 查看文件

@@ -0,0 +1,16 @@
1
+package com.vcarecity.test.entity;
2
+
3
+import lombok.Data;
4
+import lombok.EqualsAndHashCode;
5
+import lombok.ToString;
6
+
7
+/**
8
+ * @author Kerry on 19/12/10
9
+ */
10
+
11
+@ToString(callSuper = true)
12
+@EqualsAndHashCode(callSuper = true)
13
+@Data
14
+public class UnitAgencyDetailEntity extends UnitAgencyEntity {
15
+    private String agencyDetail;
16
+}

+ 43 - 0
elastic-load-data/src/main/java/com/vcarecity/test/entity/UnitAgencyEntity.java 查看文件

@@ -0,0 +1,43 @@
1
+package com.vcarecity.test.entity;
2
+
3
+import lombok.Data;
4
+
5
+import javax.persistence.Column;
6
+
7
+/**
8
+ * @author Kerry on 19/12/10
9
+ */
10
+
11
+@Data
12
+public class UnitAgencyEntity {
13
+    @Column(name = "UNIT_ID")
14
+    private Long unitId;
15
+
16
+    @Column(name = "DTU_NO")
17
+    private String dtuNo;
18
+
19
+    @Column(name = "PUSER_CODE")
20
+    private String puserCode;
21
+
22
+    @Column(name = "AGENCY_ID")
23
+    private Long agencyId;
24
+
25
+    @Column(name = "AGENCY_PATH")
26
+    private String agencyPath;
27
+
28
+    @Column(name = "AGENCY_NAME")
29
+    private String agencyName;
30
+
31
+    @Column(name = "BUILDING_ID")
32
+    private Long buildingId;
33
+
34
+    @Column(name = "NAME_OF_BUILDING")
35
+    private String nameOfBuilding;
36
+
37
+    @Column(name = "UNIT_TYPE_ID")
38
+    private Long unitTypeId;
39
+
40
+    @Column(name = "UNIT_TYPE")
41
+    private String unitType;
42
+
43
+}

+ 8 - 0
elastic-load-data/src/main/java/com/vcarecity/test/mapper/TestMapper.java 查看文件

@@ -0,0 +1,8 @@
1
+package com.vcarecity.test.mapper;
2
+
3
+/**
4
+ * @author Kerry on 19/12/09
5
+ */
6
+
7
+public interface TestMapper {
8
+}

+ 103 - 0
elastic-load-data/src/main/java/com/vcarecity/test/module/DbModule.java 查看文件

@@ -0,0 +1,103 @@
1
+package com.vcarecity.test.module;
2
+
3
+import com.google.inject.AbstractModule;
4
+import com.google.inject.Inject;
5
+import com.google.inject.Provides;
6
+import com.google.inject.Singleton;
7
+import com.vcarecity.test.properties.ConfigProperties;
8
+import com.vcarecity.test.properties.DbProperties;
9
+import com.vcarecity.test.properties.ElasticProperties;
10
+import com.zaxxer.hikari.HikariConfig;
11
+import com.zaxxer.hikari.HikariDataSource;
12
+import org.apache.http.HttpHost;
13
+import org.apache.http.auth.AuthScope;
14
+import org.apache.http.auth.Credentials;
15
+import org.apache.http.auth.UsernamePasswordCredentials;
16
+import org.apache.http.client.CredentialsProvider;
17
+import org.apache.http.impl.client.BasicCredentialsProvider;
18
+import org.elasticsearch.client.RestClient;
19
+import org.elasticsearch.client.RestClientBuilder;
20
+import org.elasticsearch.client.RestHighLevelClient;
21
+
22
+import javax.sql.DataSource;
23
+import java.io.IOException;
24
+
25
+/**
26
+ * @author Kerry on 19/12/09
27
+ */
28
+
29
+public class DbModule extends AbstractModule {
30
+    @Override
31
+    protected void configure() {
32
+        // bind(DataSource.class).to(HikariDataSource.class);
33
+    }
34
+
35
+    @Provides
36
+    @Inject
37
+    @Singleton
38
+    public DataSource dataSource(ConfigProperties configProperties) {
39
+
40
+        final DbProperties database = configProperties.getDatabase();
41
+        HikariConfig config = new HikariConfig();
42
+        config.setJdbcUrl(database.getUrl());
43
+        config.setUsername(database.getUser());
44
+        config.setPassword(database.getPassword());
45
+        //config.addDataSourceProperty("cachePrepStmts", "true");
46
+        //config.addDataSourceProperty("prepStmtCacheSize", "250");
47
+        //config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
48
+        //config.addDataSourceProperty("useServerPrepStmts", "true");
49
+        //config.addDataSourceProperty("useLocalSessionState", "true");
50
+        //config.addDataSourceProperty("rewriteBatchedStatements", "true");
51
+        //config.addDataSourceProperty("cacheResultSetMetadata", "true");
52
+        //config.addDataSourceProperty("cacheServerConfiguration", "true");
53
+        //config.addDataSourceProperty("elideSetAutoCommits", "true");
54
+        //config.addDataSourceProperty("maintainTimeStats", "false");
55
+
56
+        config.setMaximumPoolSize(2);
57
+        config.setMinimumIdle(1);
58
+        final HikariDataSource hikariDataSource = new HikariDataSource(config);
59
+        Runtime.getRuntime().addShutdownHook(new Thread(hikariDataSource::close));
60
+        return hikariDataSource;
61
+    }
62
+
63
+    @Provides
64
+    @Inject
65
+    @Singleton
66
+    public RestHighLevelClient restHighLevelClient(ConfigProperties configProperties) {
67
+        final ElasticProperties elastic = configProperties.getElasticsearch();
68
+        final String[] split = elastic.getHost().split(",");
69
+
70
+        HttpHost[] hosts = new HttpHost[split.length];
71
+        for (int i = 0; i < hosts.length; i++) {
72
+            final String[] address = split[i].split(":");
73
+            if (address.length > 1) {
74
+                hosts[i] = new HttpHost(address[0], Integer.parseInt(address[1]));
75
+            } else {
76
+                hosts[i] = new HttpHost(address[0], 9200);
77
+            }
78
+        }
79
+
80
+        final RestClientBuilder builder = RestClient.builder(hosts);
81
+
82
+        CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
83
+        Credentials credentials = new UsernamePasswordCredentials(elastic.getUser(), elastic.getPassword());
84
+        credentialsProvider.setCredentials(AuthScope.ANY, credentials);
85
+
86
+        builder.setHttpClientConfigCallback(http -> {
87
+            http.setDefaultCredentialsProvider(credentialsProvider);
88
+            return http;
89
+        });
90
+
91
+        final RestHighLevelClient restHighLevelClient = new RestHighLevelClient(builder);
92
+        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
93
+            try {
94
+                restHighLevelClient.close();
95
+            } catch (IOException e) {
96
+                e.printStackTrace();
97
+            }
98
+        }));
99
+        return restHighLevelClient;
100
+    }
101
+
102
+
103
+}

+ 29 - 0
elastic-load-data/src/main/java/com/vcarecity/test/module/PropertiesModule.java 查看文件

@@ -0,0 +1,29 @@
1
+package com.vcarecity.test.module;
2
+
3
+import com.fasterxml.jackson.databind.ObjectMapper;
4
+import com.google.inject.AbstractModule;
5
+import com.vcarecity.test.properties.ConfigProperties;
6
+
7
+/**
8
+ * @author Kerry on 19/12/09
9
+ */
10
+
11
+public class PropertiesModule extends AbstractModule {
12
+    private final ConfigProperties configProperties;
13
+
14
+    public PropertiesModule(ConfigProperties configProperties) {
15
+        this.configProperties = configProperties;
16
+    }
17
+
18
+    @Override
19
+    protected void configure() {
20
+        bind(ConfigProperties.class).toInstance(configProperties);
21
+        bind(ObjectMapper.class).toProvider(this::objectMapper);
22
+    }
23
+
24
+
25
+    protected ObjectMapper objectMapper() {
26
+        ObjectMapper objectMapper = new ObjectMapper();
27
+        return objectMapper;
28
+    }
29
+}

+ 16 - 0
elastic-load-data/src/main/java/com/vcarecity/test/module/ServiceModule.java 查看文件

@@ -0,0 +1,16 @@
1
+package com.vcarecity.test.module;
2
+
3
+import com.google.inject.AbstractModule;
4
+import com.vcarecity.test.service.ObtainDataService;
5
+import com.vcarecity.test.service.oracle.OracleObtainDataServiceImpl;
6
+
7
+/**
8
+ * @author Kerry on 19/12/09
9
+ */
10
+
11
+public class ServiceModule extends AbstractModule {
12
+    @Override
13
+    protected void configure() {
14
+        bind(ObtainDataService.class).to(OracleObtainDataServiceImpl.class);
15
+    }
16
+}

+ 14 - 0
elastic-load-data/src/main/java/com/vcarecity/test/properties/ConfigProperties.java 查看文件

@@ -0,0 +1,14 @@
1
+package com.vcarecity.test.properties;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * @author Kerry on 19/12/09
7
+ */
8
+
9
+@Data
10
+public class ConfigProperties {
11
+
12
+    private DbProperties database;
13
+    private ElasticProperties elasticsearch;
14
+}

+ 14 - 0
elastic-load-data/src/main/java/com/vcarecity/test/properties/DbProperties.java 查看文件

@@ -0,0 +1,14 @@
1
+package com.vcarecity.test.properties;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * @author Kerry on 19/12/09
7
+ */
8
+
9
+@Data
10
+public class DbProperties {
11
+    private String url;
12
+    private String user;
13
+    private String password;
14
+}

+ 15 - 0
elastic-load-data/src/main/java/com/vcarecity/test/properties/ElasticProperties.java 查看文件

@@ -0,0 +1,15 @@
1
+package com.vcarecity.test.properties;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * @author Kerry on 19/12/10
7
+ */
8
+
9
+@Data
10
+public class ElasticProperties {
11
+    private String host;
12
+    private String schema;
13
+    private String user;
14
+    private String password;
15
+}

+ 23 - 0
elastic-load-data/src/main/java/com/vcarecity/test/repository/AgencyRepository.java 查看文件

@@ -0,0 +1,23 @@
1
+package com.vcarecity.test.repository;
2
+
3
+import com.google.inject.ImplementedBy;
4
+import com.vcarecity.test.entity.AgencyEntity;
5
+import com.vcarecity.test.repository.impl.AgencyRepositoryImpl;
6
+
7
+import java.sql.SQLException;
8
+import java.util.List;
9
+
10
+/**
11
+ * @author Kerry on 19/12/10
12
+ */
13
+
14
+@ImplementedBy(AgencyRepositoryImpl.class)
15
+public interface AgencyRepository {
16
+    /**
17
+     * find by agency id list
18
+     *
19
+     * @param agencyIdList
20
+     * @return
21
+     */
22
+    List<AgencyEntity> findByAgencyIdList(List<Integer> agencyIdList) throws SQLException;
23
+}

+ 53 - 0
elastic-load-data/src/main/java/com/vcarecity/test/repository/impl/AgencyRepositoryImpl.java 查看文件

@@ -0,0 +1,53 @@
1
+package com.vcarecity.test.repository.impl;
2
+
3
+
4
+import com.google.inject.Inject;
5
+import com.vcarecity.test.entity.AgencyEntity;
6
+import com.vcarecity.test.repository.AgencyRepository;
7
+import lombok.extern.slf4j.Slf4j;
8
+
9
+import javax.sql.DataSource;
10
+import java.sql.Connection;
11
+import java.sql.ResultSet;
12
+import java.sql.SQLException;
13
+import java.sql.Statement;
14
+import java.util.ArrayList;
15
+import java.util.List;
16
+
17
+/**
18
+ * @author Kerry on 19/12/10
19
+ */
20
+
21
+@Slf4j
22
+public class AgencyRepositoryImpl implements AgencyRepository {
23
+
24
+    private final DataSource dataSource;
25
+
26
+    @Inject
27
+    public AgencyRepositoryImpl(DataSource dataSource) {
28
+        this.dataSource = dataSource;
29
+    }
30
+
31
+    @Override
32
+    public List<AgencyEntity> findByAgencyIdList(List<Integer> agencyIdList) throws SQLException {
33
+
34
+        final String join = String.join(",", agencyIdList.stream().map(i -> "" + i).toArray(String[]::new));
35
+
36
+        String sql = "select AGENCY_NAME from T_AGENCY where AGENCY_ID in (" + join + ")";
37
+
38
+        logger.debug("findByAgencyIdList: {}", sql);
39
+
40
+        try (final Connection connection = dataSource.getConnection();
41
+             final Statement statement = connection.createStatement();
42
+             final ResultSet resultSet = statement.executeQuery(sql)) {
43
+
44
+            List<AgencyEntity> list = new ArrayList<>();
45
+            while (resultSet.next()) {
46
+                AgencyEntity ae = new AgencyEntity();
47
+                ae.setAgencyName(resultSet.getString("AGENCY_NAME"));
48
+                list.add(ae);
49
+            }
50
+            return list;
51
+        }
52
+    }
53
+}

+ 24 - 0
elastic-load-data/src/main/java/com/vcarecity/test/service/AgencyService.java 查看文件

@@ -0,0 +1,24 @@
1
+package com.vcarecity.test.service;
2
+
3
+import com.google.inject.ImplementedBy;
4
+import com.vcarecity.test.service.oracle.AgencyServiceImpl;
5
+
6
+import java.util.List;
7
+
8
+/**
9
+ * @author Kerry on 19/12/09
10
+ */
11
+
12
+@ImplementedBy(AgencyServiceImpl.class)
13
+public interface AgencyService {
14
+
15
+
16
+    /**
17
+     * 获取
18
+     *
19
+     * @param agencyPath
20
+     * @return
21
+     */
22
+    List<String> getAgencyPathDetail(List<Integer> agencyPath);
23
+
24
+}

+ 21 - 0
elastic-load-data/src/main/java/com/vcarecity/test/service/ElasticSaveService.java 查看文件

@@ -0,0 +1,21 @@
1
+package com.vcarecity.test.service;
2
+
3
+import com.google.inject.ImplementedBy;
4
+import com.vcarecity.test.entity.UnitAgencyEntity;
5
+import com.vcarecity.test.service.elastic.ElasticSaveServiceImpl;
6
+
7
+import java.util.List;
8
+
9
+/**
10
+ * @author Kerry on 19/12/09
11
+ */
12
+
13
+@ImplementedBy(ElasticSaveServiceImpl.class)
14
+public interface ElasticSaveService {
15
+    /**
16
+     * save
17
+     *
18
+     * @param result
19
+     */
20
+    <T> void saveUnitAgencyData(List<UnitAgencyEntity> result);
21
+}

+ 23 - 0
elastic-load-data/src/main/java/com/vcarecity/test/service/ObtainDataService.java 查看文件

@@ -0,0 +1,23 @@
1
+package com.vcarecity.test.service;
2
+
3
+import com.vcarecity.test.entity.UnitAgencyEntity;
4
+
5
+import java.util.List;
6
+
7
+/**
8
+ * @author Kerry on 19/12/09
9
+ */
10
+
11
+public interface ObtainDataService {
12
+
13
+    /**
14
+     * 查询 机构和设备信息
15
+     *
16
+     * @param page
17
+     * @param size
18
+     * @return
19
+     */
20
+    List<UnitAgencyEntity> queryUnitAgencyDataByPage(int page, int size);
21
+
22
+
23
+}

+ 22 - 0
elastic-load-data/src/main/java/com/vcarecity/test/service/QueryDataService.java 查看文件

@@ -0,0 +1,22 @@
1
+package com.vcarecity.test.service;
2
+
3
+import com.google.inject.ImplementedBy;
4
+import com.vcarecity.test.service.elastic.QueryDataServiceImpl;
5
+
6
+import java.io.IOException;
7
+
8
+/**
9
+ * @author Kerry on 19/12/10
10
+ */
11
+
12
+@ImplementedBy(QueryDataServiceImpl.class)
13
+public interface QueryDataService {
14
+
15
+    /**
16
+     * 查询
17
+     *
18
+     * @param agencyPath
19
+     * @param filter
20
+     */
21
+    void queryByCondition(String agencyPath, String filter) throws IOException;
22
+}

+ 105 - 0
elastic-load-data/src/main/java/com/vcarecity/test/service/elastic/ElasticSaveServiceImpl.java 查看文件

@@ -0,0 +1,105 @@
1
+package com.vcarecity.test.service.elastic;
2
+
3
+import com.fasterxml.jackson.databind.ObjectMapper;
4
+import com.google.inject.Inject;
5
+import com.vcarecity.elastic.util.AgencyPathUtil;
6
+import com.vcarecity.test.entity.UnitAgencyDetailEntity;
7
+import com.vcarecity.test.entity.UnitAgencyEntity;
8
+import com.vcarecity.test.service.AgencyService;
9
+import com.vcarecity.test.service.ElasticSaveService;
10
+import com.vcarecity.test.util.SnowFlake;
11
+import lombok.extern.slf4j.Slf4j;
12
+import net.sf.cglib.beans.BeanCopier;
13
+import org.elasticsearch.action.bulk.BulkRequest;
14
+import org.elasticsearch.action.bulk.BulkResponse;
15
+import org.elasticsearch.action.index.IndexRequest;
16
+import org.elasticsearch.client.RequestOptions;
17
+import org.elasticsearch.client.RestHighLevelClient;
18
+import org.elasticsearch.common.xcontent.XContentType;
19
+
20
+import java.io.IOException;
21
+import java.util.ArrayList;
22
+import java.util.List;
23
+import java.util.Map;
24
+
25
+/**
26
+ * @author Kerry on 19/12/09
27
+ */
28
+
29
+@Slf4j
30
+public class ElasticSaveServiceImpl implements ElasticSaveService {
31
+
32
+    private final RestHighLevelClient restHighLevelClient;
33
+    private final AgencyService agencyService;
34
+    private final ObjectMapper objectMapper;
35
+
36
+    @Inject
37
+    public ElasticSaveServiceImpl(RestHighLevelClient restHighLevelClient,
38
+                                  AgencyService agencyService,
39
+                                  ObjectMapper objectMapper) {
40
+        this.restHighLevelClient = restHighLevelClient;
41
+        this.agencyService = agencyService;
42
+        this.objectMapper = objectMapper;
43
+    }
44
+
45
+    @Override
46
+    public <T> void saveUnitAgencyData(List<UnitAgencyEntity> result) {
47
+
48
+        final BeanCopier beanCopier = BeanCopier.create(UnitAgencyEntity.class, UnitAgencyDetailEntity.class, false);
49
+
50
+        List<Map> saveResult = new ArrayList<>(result.size());
51
+
52
+        for (UnitAgencyEntity uae : result) {
53
+            final List<Integer> agencyIdList = AgencyPathUtil.splitAgencyId(uae.getAgencyPath());
54
+            List<String> agencyPathDetail = agencyService.getAgencyPathDetail(agencyIdList);
55
+
56
+            UnitAgencyDetailEntity unitAgencyDetailEntity = new UnitAgencyDetailEntity();
57
+
58
+
59
+            beanCopier.copy(uae, unitAgencyDetailEntity, null);
60
+
61
+            unitAgencyDetailEntity.setAgencyDetail(String.join("", agencyPathDetail));
62
+
63
+            @SuppressWarnings("rawtypes")
64
+            Map map = objectMapper.convertValue(unitAgencyDetailEntity, Map.class);
65
+            final Map<String, Integer> queryMap = AgencyPathUtil.agencyPathQueryMap(agencyIdList);
66
+            //noinspection unchecked
67
+            map.putAll(queryMap);
68
+
69
+            saveResult.add(map);
70
+        }
71
+
72
+
73
+        String index = "unit-agency";
74
+        logger.info("start insert into: {}", index);
75
+
76
+        try {
77
+            BulkRequest bulkRequest = new BulkRequest();
78
+            boolean hasData = false;
79
+            for (Map val : saveResult) {
80
+                if (!hasData) {
81
+                    hasData = true;
82
+                }
83
+                IndexRequest indexRequest = createIndexRequest(index, val);
84
+                /// restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
85
+                bulkRequest.add(indexRequest);
86
+            }
87
+            if (hasData) {
88
+                BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
89
+                logger.info("bulk insert status {}", bulkResponse.status());
90
+            }
91
+        } catch (IOException e) {
92
+            e.printStackTrace();
93
+        }
94
+    }
95
+
96
+    @SuppressWarnings("rawtypes")
97
+    private IndexRequest createIndexRequest(String index, Map value) {
98
+        IndexRequest indexRequest = new IndexRequest(index);
99
+        indexRequest.id(SnowFlake.nextId() + "");
100
+        //noinspection unchecked
101
+        indexRequest.source(value, XContentType.JSON);
102
+        return indexRequest;
103
+    }
104
+
105
+}

+ 83 - 0
elastic-load-data/src/main/java/com/vcarecity/test/service/elastic/QueryDataServiceImpl.java 查看文件

@@ -0,0 +1,83 @@
1
+package com.vcarecity.test.service.elastic;
2
+
3
+import com.google.inject.Inject;
4
+import com.vcarecity.elastic.util.AgencyPathUtil;
5
+import com.vcarecity.test.service.QueryDataService;
6
+import org.elasticsearch.action.search.SearchRequest;
7
+import org.elasticsearch.action.search.SearchResponse;
8
+import org.elasticsearch.client.RequestOptions;
9
+import org.elasticsearch.client.RestHighLevelClient;
10
+import org.elasticsearch.index.query.BoolQueryBuilder;
11
+import org.elasticsearch.index.query.QueryBuilders;
12
+import org.elasticsearch.index.query.TermQueryBuilder;
13
+import org.elasticsearch.search.SearchHit;
14
+import org.elasticsearch.search.SearchHits;
15
+import org.elasticsearch.search.builder.SearchSourceBuilder;
16
+
17
+import java.io.IOException;
18
+import java.util.List;
19
+import java.util.Map;
20
+
21
+/**
22
+ * @author Kerry on 19/12/10
23
+ */
24
+
25
+
26
+public class QueryDataServiceImpl implements QueryDataService {
27
+
28
+    private final RestHighLevelClient restHighLevelClient;
29
+
30
+    @Inject
31
+    public QueryDataServiceImpl(RestHighLevelClient restHighLevelClient) {
32
+        this.restHighLevelClient = restHighLevelClient;
33
+    }
34
+
35
+
36
+    @Override
37
+    public void queryByCondition(String agencyPath, String filter) throws IOException {
38
+        List<Integer> agencyIds = AgencyPathUtil.splitAgencyId(agencyPath);
39
+        BoolQueryBuilder boolQueryBuilder = agencyCondition(agencyIds);
40
+
41
+        String index = "unit-agency";
42
+
43
+
44
+        SearchRequest searchRequest = new SearchRequest();
45
+        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
46
+        final BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery().must(boolQueryBuilder);
47
+        System.out.println(queryBuilder);
48
+        searchSourceBuilder.query(queryBuilder);
49
+        searchSourceBuilder.fetchSource(new String[]{"unitId", "agencyPath"}, new String[]{});
50
+        searchSourceBuilder.size(1000);
51
+
52
+        searchRequest.source(searchSourceBuilder);
53
+        searchRequest.indices(index);
54
+        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
55
+
56
+        final SearchHits hits = searchResponse.getHits();
57
+        int count = 0;
58
+        long time = System.currentTimeMillis();
59
+        for (SearchHit hit : hits.getHits()) {
60
+            System.out.println((count++) + " - " + hit.getSourceAsString());
61
+        }
62
+        System.out.println((System.currentTimeMillis() - time) + " /ms");
63
+    }
64
+
65
+
66
+    private BoolQueryBuilder agencyCondition(List<Integer> agencyIds) {
67
+
68
+        if (agencyIds == null || agencyIds.size() == 0) {
69
+            return null;
70
+        }
71
+        final BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
72
+
73
+        final Map<String, Integer> map = AgencyPathUtil.agencyPathQueryMap(agencyIds);
74
+
75
+        for (Map.Entry<String, Integer> entry : map.entrySet()) {
76
+            TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery(entry.getKey(), entry.getValue());
77
+            boolQueryBuilder.must(termQueryBuilder);
78
+        }
79
+        return boolQueryBuilder;
80
+    }
81
+
82
+
83
+}

+ 43 - 0
elastic-load-data/src/main/java/com/vcarecity/test/service/oracle/AgencyServiceImpl.java 查看文件

@@ -0,0 +1,43 @@
1
+package com.vcarecity.test.service.oracle;
2
+
3
+import com.google.inject.Inject;
4
+import com.vcarecity.test.entity.AgencyEntity;
5
+import com.vcarecity.test.repository.AgencyRepository;
6
+import com.vcarecity.test.service.AgencyService;
7
+
8
+import java.sql.SQLException;
9
+import java.util.List;
10
+import java.util.stream.Collectors;
11
+
12
+/**
13
+ * @author Kerry on 19/12/09
14
+ */
15
+
16
+public class AgencyServiceImpl implements AgencyService {
17
+    private final AgencyRepository agencyRepository;
18
+
19
+    @Inject
20
+    public AgencyServiceImpl(AgencyRepository agencyRepository) {
21
+        this.agencyRepository = agencyRepository;
22
+    }
23
+
24
+
25
+    @Override
26
+    public List<String> getAgencyPathDetail(List<Integer> agencyPath) {
27
+
28
+        //TODO 有待优化
29
+
30
+
31
+        List<AgencyEntity> byAgencyIdList;
32
+        try {
33
+            byAgencyIdList = agencyRepository.findByAgencyIdList(agencyPath);
34
+        } catch (SQLException e) {
35
+            e.printStackTrace();
36
+            return null;
37
+        }
38
+
39
+        return byAgencyIdList.stream().map(AgencyEntity::getAgencyName).collect(Collectors.toList());
40
+    }
41
+
42
+
43
+}

+ 127 - 0
elastic-load-data/src/main/java/com/vcarecity/test/service/oracle/OracleObtainDataServiceImpl.java 查看文件

@@ -0,0 +1,127 @@
1
+package com.vcarecity.test.service.oracle;
2
+
3
+import com.google.inject.Inject;
4
+import com.vcarecity.test.entity.UnitAgencyEntity;
5
+import com.vcarecity.test.service.ObtainDataService;
6
+import com.vcarecity.test.typehandler.TypeHandler;
7
+import lombok.extern.slf4j.Slf4j;
8
+
9
+import javax.sql.DataSource;
10
+import java.sql.Connection;
11
+import java.sql.PreparedStatement;
12
+import java.sql.ResultSet;
13
+import java.sql.SQLException;
14
+import java.util.List;
15
+
16
+/**
17
+ * @author Kerry on 19/12/09
18
+ */
19
+
20
+@Slf4j
21
+public class OracleObtainDataServiceImpl implements ObtainDataService {
22
+
23
+    public static final String OB_SQL_1 = "select P.*\n" +
24
+            "from (\n" +
25
+            "         SELECT TU.UNIT_ID,\n" +
26
+            "                TU.DTU_NO,\n" +
27
+            "                TU.PUSER_CODE,\n" +
28
+            "                TAG.AGENCY_ID,\n" +
29
+            "                TAG.AGENCY_PATH,\n" +
30
+            "                TAG.AGENCY_NAME,\n" +
31
+            "                TB.BUILDING_ID,\n" +
32
+            "                TB.NAME_OF_BUILDING,\n" +
33
+            "                TUT.UNIT_TYPE_ID,\n" +
34
+            "                TUT.UNIT_TYPE,\n" +
35
+            "                TE.EVENT,\n" +
36
+            "                ROW_NUMBER() OVER (ORDER BY TUT.PROPERTY , TU.UPDATESTAMP DESC, TU.UNIT_ID) RN\n" +
37
+            "         FROM T_AGENCY TAG\n" +
38
+            "                  INNER JOIN T_UNIT TU ON TU.AGENCY_ID = TAG.AGENCY_ID AND TU.ISDELETED = 0\n" +
39
+            "                  INNER JOIN T_BUILDING TB ON TB.BUILDING_ID = TU.BUILDING_ID\n" +
40
+            "                  INNER JOIN T_UNIT_TYPE TUT ON TUT.UNIT_TYPE_ID = TU.UNIT_TYPE_ID\n" +
41
+            "                  LEFT JOIN T_EVENT TE ON TE.EVENT_ID = TU.UNIT_STATE_ID\n" +
42
+            "     ) P\n" +
43
+            "WHERE P.RN > ? " +
44
+            "  AND P.RN <= ?";
45
+
46
+
47
+    public static final String OB_SQL_2 = "select P.*\n" +
48
+            "from (\n" +
49
+            "         SELECT TU.UNIT_ID,\n" +
50
+            "                TU.DTU_NO,\n" +
51
+            "                TU.PUSER_CODE,\n" +
52
+            "                TAG.AGENCY_ID,\n" +
53
+            "                TAG.AGENCY_PATH,\n" +
54
+            "                TAG.AGENCY_NAME,\n" +
55
+            "                TB.BUILDING_ID,\n" +
56
+            "                TB.NAME_OF_BUILDING,\n" +
57
+            "                TUT.UNIT_TYPE_ID,\n" +
58
+            "                TUT.UNIT_TYPE,\n" +
59
+            "                TE.EVENT,\n" +
60
+            "                ROWNUM RN\n" +
61
+            "         FROM T_AGENCY TAG\n" +
62
+            "                  INNER JOIN T_UNIT TU ON TU.AGENCY_ID = TAG.AGENCY_ID AND TU.ISDELETED = 0\n" +
63
+            "                  INNER JOIN T_BUILDING TB ON TB.BUILDING_ID = TU.BUILDING_ID\n" +
64
+            "                  INNER JOIN T_UNIT_TYPE TUT ON TUT.UNIT_TYPE_ID = TU.UNIT_TYPE_ID\n" +
65
+            "                  LEFT JOIN T_EVENT TE ON TE.EVENT_ID = TU.UNIT_STATE_ID\n" +
66
+            "         where ROWNUM <= ?\n" +
67
+            "     ) P\n" +
68
+            "WHERE P.RN > ?";
69
+
70
+
71
+    public static final String OB_SQL = "select P.*\n" +
72
+            "from (\n" +
73
+            "         SELECT TU.UNIT_ID,\n" +
74
+            "                TU.DTU_NO,\n" +
75
+            "                TU.PUSER_CODE,\n" +
76
+            "                TAG.AGENCY_ID,\n" +
77
+            "                TAG.AGENCY_PATH,\n" +
78
+            "                TAG.AGENCY_NAME,\n" +
79
+            "                TB.BUILDING_ID,\n" +
80
+            "                TB.NAME_OF_BUILDING,\n" +
81
+            "                TUT.UNIT_TYPE_ID,\n" +
82
+            "                TUT.UNIT_TYPE," +
83
+            "                ROWNUM RN\n" +
84
+            "         FROM T_AGENCY TAG\n" +
85
+            "                  INNER JOIN T_UNIT TU ON TU.AGENCY_ID = TAG.AGENCY_ID AND TU.ISDELETED = 0\n" +
86
+            "                  INNER JOIN T_BUILDING TB ON TB.BUILDING_ID = TU.BUILDING_ID\n" +
87
+            "                  INNER JOIN T_UNIT_TYPE TUT ON TUT.UNIT_TYPE_ID = TU.UNIT_TYPE_ID\n" +
88
+            "         where ROWNUM <= ?\n" +
89
+            "     ) P\n" +
90
+            "WHERE P.RN > ?";
91
+
92
+    private final DataSource dataSource;
93
+    private final TypeHandler typeHandler;
94
+
95
+    @Inject
96
+    public OracleObtainDataServiceImpl(DataSource dataSource,
97
+                                       TypeHandler typeHandler) {
98
+        this.dataSource = dataSource;
99
+        this.typeHandler = typeHandler;
100
+        logger.info("OracleObtainDataServiceImpl.OracleObtainDataServiceImpl. dataSource = {}", dataSource);
101
+    }
102
+
103
+
104
+    @Override
105
+    public List<UnitAgencyEntity> queryUnitAgencyDataByPage(int page, int size) {
106
+
107
+        logger.debug("SQL = {}. page = {}, size = {}", OB_SQL, page, size);
108
+
109
+        int begin = page * size;
110
+        int end = (1 + page) * size;
111
+
112
+        try (Connection connection = dataSource.getConnection();
113
+             final PreparedStatement ps = connection.prepareStatement(OB_SQL)) {
114
+            ps.setInt(1, end);
115
+            ps.setInt(2, begin);
116
+
117
+            try (ResultSet resultSet = ps.executeQuery()) {
118
+                return typeHandler.resultHandler(resultSet, UnitAgencyEntity.class);
119
+            } catch (IllegalAccessException | InstantiationException e) {
120
+                e.printStackTrace();
121
+            }
122
+        } catch (SQLException e) {
123
+            e.printStackTrace();
124
+        }
125
+        return null;
126
+    }
127
+}

+ 76 - 0
elastic-load-data/src/main/java/com/vcarecity/test/task/ImportTask.java 查看文件

@@ -0,0 +1,76 @@
1
+package com.vcarecity.test.task;
2
+
3
+import com.google.inject.Inject;
4
+import com.vcarecity.test.HighClientApp;
5
+import com.vcarecity.test.entity.UnitAgencyEntity;
6
+import com.vcarecity.test.service.ElasticSaveService;
7
+import com.vcarecity.test.service.ObtainDataService;
8
+import com.zaxxer.hikari.HikariDataSource;
9
+import lombok.extern.slf4j.Slf4j;
10
+import org.elasticsearch.client.RestHighLevelClient;
11
+
12
+import javax.sql.DataSource;
13
+import java.util.List;
14
+
15
+/**
16
+ * @author Kerry on 19/12/09
17
+ */
18
+
19
+@Slf4j
20
+public class ImportTask {
21
+
22
+    private static final int PAGE_COUNT = 2000;
23
+
24
+    private final ObtainDataService obtainDataService;
25
+    private final ElasticSaveService elasticSaveService;
26
+
27
+    @Inject
28
+    public ImportTask(ObtainDataService obtainDataService,
29
+                      ElasticSaveService elasticSaveService) {
30
+        this.obtainDataService = obtainDataService;
31
+        this.elasticSaveService = elasticSaveService;
32
+    }
33
+
34
+
35
+    public void startTask() {
36
+        logger.info("ImportTask.startTask. {}", obtainDataService.getClass());
37
+
38
+        long allTime = System.currentTimeMillis();
39
+
40
+        int count = 0;
41
+
42
+        int start = 0;
43
+        List<UnitAgencyEntity> result;
44
+        do {
45
+            long startTime = System.currentTimeMillis();
46
+            result = obtainDataService.queryUnitAgencyDataByPage(start++, PAGE_COUNT);
47
+            count += result.size();
48
+            logger.info("query usageTime: {} ms. count = {}", (System.currentTimeMillis() - startTime), count);
49
+
50
+            startTime = System.currentTimeMillis();
51
+            elasticSaveService.saveUnitAgencyData(result);
52
+
53
+            logger.info("write to Elasticsearch usageTime: {} ms.", (System.currentTimeMillis() - startTime));
54
+
55
+        } while (result.size() == PAGE_COUNT);
56
+
57
+        logger.info("ImportTask.stop. All usageTime = {} ms.", (System.currentTimeMillis() - allTime));
58
+
59
+    }
60
+
61
+    public void stopApp() {
62
+        try {
63
+            final DataSource instance = HighClientApp.injector.getInstance(DataSource.class);
64
+            ((HikariDataSource) instance).close();
65
+        } catch (Exception e) {
66
+
67
+        }
68
+        try {
69
+            final RestHighLevelClient instance = HighClientApp.injector.getInstance(RestHighLevelClient.class);
70
+            instance.close();
71
+        } catch (Exception e) {
72
+
73
+        }
74
+
75
+    }
76
+}

+ 80 - 0
elastic-load-data/src/main/java/com/vcarecity/test/typehandler/AutoTypeHandler.java 查看文件

@@ -0,0 +1,80 @@
1
+package com.vcarecity.test.typehandler;
2
+
3
+import com.vcarecity.test.core.ReflectionUtil;
4
+
5
+import java.lang.reflect.Modifier;
6
+import java.math.BigDecimal;
7
+import java.sql.Date;
8
+import java.sql.ResultSet;
9
+import java.sql.SQLException;
10
+import java.sql.Timestamp;
11
+import java.time.LocalDate;
12
+import java.time.LocalDateTime;
13
+import java.util.ArrayList;
14
+import java.util.List;
15
+
16
+/**
17
+ * @author Kerry on 19/12/10
18
+ */
19
+
20
+public class AutoTypeHandler implements TypeHandler {
21
+
22
+    @Override
23
+    public <T> List<T> resultHandler(ResultSet resultSet, Class<T> cls) throws SQLException, IllegalAccessException, InstantiationException {
24
+
25
+        List<TypeParam> tps = TYPE_CACHE.get(cls);
26
+        if (tps == null) {
27
+            List<TypeParam> list = ReflectionUtil.reflectOrmClass(cls);
28
+            TYPE_CACHE.put(cls, list);
29
+            tps = TYPE_CACHE.get(cls);
30
+        }
31
+
32
+        List<T> list = new ArrayList<>();
33
+
34
+        while (resultSet.next()) {
35
+            T t = cls.newInstance();
36
+            for (TypeParam tp : tps) {
37
+                Object value = resultSet.getObject(tp.getColumnName());
38
+                if (Modifier.isPrivate(tp.getField().getModifiers())) {
39
+                    tp.getField().setAccessible(true);
40
+                }
41
+                if (value instanceof BigDecimal) {
42
+                    Class<?> declaringClass = tp.getField().getType();
43
+                    if (declaringClass == BigDecimal.class) {
44
+                        tp.getField().set(t, value);
45
+                    } else if (declaringClass == Long.class) {
46
+                        tp.getField().set(t, ((BigDecimal) value).longValue());
47
+                    } else if (declaringClass == Integer.class) {
48
+                        tp.getField().set(t, ((BigDecimal) value).intValue());
49
+                    } else {
50
+                        tp.getField().set(t, value);
51
+                    }
52
+                } else if (value instanceof Timestamp) {
53
+                    Class<?> declaringClass = tp.getField().getType();
54
+                    if (declaringClass == LocalDateTime.class) {
55
+                        tp.getField().set(t, ((Timestamp) value).toLocalDateTime());
56
+                    } else if (declaringClass == java.util.Date.class) {
57
+                        tp.getField().set(t, java.util.Date.from(((Timestamp) value).toInstant()));
58
+                    } else {
59
+                        tp.getField().set(t, value);
60
+                    }
61
+                } else if (value instanceof Date) {
62
+                    Class<?> declaringClass = tp.getField().getType();
63
+                    if (declaringClass == LocalDate.class) {
64
+                        tp.getField().set(t, ((Date) value).toLocalDate());
65
+                    } else if (declaringClass == java.util.Date.class) {
66
+                        tp.getField().set(t, java.util.Date.from(((Date) value).toInstant()));
67
+                    } else {
68
+                        tp.getField().set(t, value);
69
+                    }
70
+                } else {
71
+                    tp.getField().set(t, value);
72
+                }
73
+
74
+            }
75
+            list.add(t);
76
+        }
77
+
78
+        return list;
79
+    }
80
+}

+ 33 - 0
elastic-load-data/src/main/java/com/vcarecity/test/typehandler/TypeHandler.java 查看文件

@@ -0,0 +1,33 @@
1
+package com.vcarecity.test.typehandler;
2
+
3
+import com.google.inject.ImplementedBy;
4
+
5
+import java.sql.ResultSet;
6
+import java.sql.SQLException;
7
+import java.util.List;
8
+import java.util.Map;
9
+import java.util.concurrent.ConcurrentHashMap;
10
+
11
+/**
12
+ * @author Kerry on 19/12/10
13
+ */
14
+
15
+@ImplementedBy(AutoTypeHandler.class)
16
+public interface TypeHandler {
17
+
18
+    Map<Class<?>, List<TypeParam>> TYPE_CACHE = new ConcurrentHashMap<>();
19
+
20
+    /**
21
+     * 处理
22
+     *
23
+     * @param resultSet
24
+     * @param cls
25
+     * @return
26
+     * @throws SQLException
27
+     * @throws IllegalAccessException
28
+     * @throws InstantiationException
29
+     */
30
+    <T> List<T> resultHandler(ResultSet resultSet, Class<T> cls) throws SQLException, IllegalAccessException, InstantiationException;
31
+
32
+
33
+}

+ 18 - 0
elastic-load-data/src/main/java/com/vcarecity/test/typehandler/TypeParam.java 查看文件

@@ -0,0 +1,18 @@
1
+package com.vcarecity.test.typehandler;
2
+
3
+import lombok.Data;
4
+
5
+import java.lang.reflect.Field;
6
+
7
+/**
8
+ * @author Kerry on 19/12/10
9
+ */
10
+
11
+@Data
12
+public class TypeParam {
13
+    private String columnName;
14
+    private Field field;
15
+
16
+
17
+
18
+}

+ 119 - 0
elastic-load-data/src/main/java/com/vcarecity/test/util/SnowFlake.java 查看文件

@@ -0,0 +1,119 @@
1
+package com.vcarecity.test.util;
2
+
3
+/**
4
+ * @author VcKerry
5
+ */
6
+public class SnowFlake {
7
+
8
+    /**
9
+     * 起始的时间戳:这个时间戳自己随意获取,比如自己代码的时间戳
10
+     */
11
+    private final static long START_STMP = 1543903501000L;
12
+
13
+    /**
14
+     * 每一部分占用的位数
15
+     */
16
+    private final static long SEQUENCE_BIT = 12; //序列号占用的位数
17
+    private final static long MACHINE_BIT = 5;  //机器标识占用的位数
18
+    private final static long DATACENTER_BIT = 5;//数据中心占用的位数
19
+
20
+    /**
21
+     * 每一部分的最大值:先进行左移运算,再同-1进行异或运算;异或:相同位置相同结果为0,不同结果为1
22
+     */
23
+    /**
24
+     * 用位运算计算出最大支持的数据中心数量:31
25
+     */
26
+    private final static long MAX_DATACENTER_NUM = -1L ^ (-1L << DATACENTER_BIT);
27
+
28
+    /**
29
+     * 用位运算计算出最大支持的机器数量:31
30
+     */
31
+    private final static long MAX_MACHINE_NUM = -1L ^ (-1L << MACHINE_BIT);
32
+
33
+    /**
34
+     * 用位运算计算出12位能存储的最大正整数:4095
35
+     */
36
+    private final static long MAX_SEQUENCE = -1L ^ (-1L << SEQUENCE_BIT);
37
+
38
+    /**
39
+     * 每一部分向左的位移
40
+     */
41
+
42
+    /**
43
+     * 机器标志较序列号的偏移量
44
+     */
45
+    private final static long MACHINE_LEFT = SEQUENCE_BIT;
46
+
47
+    /**
48
+     * 数据中心较机器标志的偏移量
49
+     */
50
+    private final static long DATACENTER_LEFT = SEQUENCE_BIT + MACHINE_BIT;
51
+
52
+    /**
53
+     * 时间戳较数据中心的偏移量
54
+     */
55
+    private final static long TIMESTMP_LEFT = DATACENTER_LEFT + DATACENTER_BIT;
56
+
57
+    private static long datacenterId;  //数据中心
58
+    private static long machineId;    //机器标识
59
+    private static long sequence = 0L; //序列号
60
+    private static long lastStmp = -1L;//上一次时间戳
61
+
62
+    /**
63
+     * 此处无参构造私有,同时没有给出有参构造,在于避免以下两点问题:
64
+     * 1、私有化避免了通过new的方式进行调用,主要是解决了在for循环中通过new的方式调用产生的id不一定唯一问题问题,因为用于			 记录上一次时间戳的lastStmp永远无法得到比对;
65
+     * 2、没有给出有参构造在第一点的基础上考虑了一套分布式系统产生的唯一序列号应该是基于相同的参数
66
+     */
67
+    private SnowFlake() {
68
+    }
69
+
70
+    /**
71
+     * 产生下一个ID
72
+     *
73
+     * @return
74
+     */
75
+    public static synchronized long nextId() {
76
+        /** 获取当前时间戳 */
77
+        long currStmp = getNewstmp();
78
+
79
+        /** 如果当前时间戳小于上次时间戳则抛出异常 */
80
+        if (currStmp < lastStmp) {
81
+            throw new RuntimeException("Clock moved backwards.  Refusing to generate id");
82
+        }
83
+        /** 相同毫秒内 */
84
+        if (currStmp == lastStmp) {
85
+            //相同毫秒内,序列号自增
86
+            sequence = (sequence + 1) & MAX_SEQUENCE;
87
+            //同一毫秒的序列数已经达到最大
88
+            if (sequence == 0L) {
89
+
90
+                /** 获取下一时间的时间戳并赋值给当前时间戳 */
91
+                currStmp = getNextMill();
92
+            }
93
+        } else {
94
+            //不同毫秒内,序列号置为0
95
+            sequence = 0L;
96
+        }
97
+        /** 当前时间戳存档记录,用于下次产生id时对比是否为相同时间戳 */
98
+        lastStmp = currStmp;
99
+
100
+
101
+        return (currStmp - START_STMP) << TIMESTMP_LEFT //时间戳部分
102
+                | datacenterId << DATACENTER_LEFT      //数据中心部分
103
+                | machineId << MACHINE_LEFT            //机器标识部分
104
+                | sequence;                            //序列号部分
105
+    }
106
+
107
+    private static long getNextMill() {
108
+        long mill = getNewstmp();
109
+        while (mill <= lastStmp) {
110
+            mill = getNewstmp();
111
+        }
112
+        return mill;
113
+    }
114
+
115
+    private static long getNewstmp() {
116
+        return System.currentTimeMillis();
117
+    }
118
+
119
+}

+ 1 - 0
elastic-load-data/src/main/lombok.config 查看文件

@@ -0,0 +1 @@
1
+lombok.log.fieldName = logger

+ 38 - 0
elastic-load-data/src/main/resources/logback-test.xml 查看文件

@@ -0,0 +1,38 @@
1
+<configuration scan="true" scanPeriod="120 seconds">
2
+
3
+    <property name="LOG_HOME" value="./logs"/>
4
+    <statusListener class="ch.qos.logback.core.status.NopStatusListener"/>
5
+
6
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
7
+        <encoder>
8
+            <pattern>%d{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) [%15.15t] %cyan(%-40.40logger{39}): %msg %n</pattern>
9
+        </encoder>
10
+    </appender>
11
+
12
+    <appender name="FILE_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
13
+
14
+        <file>${LOG_HOME}/application.log</file>
15
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
16
+            <fileNamePattern>${LOG_HOME}/application.%d{yyyyMMdd}_%i.log</fileNamePattern>
17
+            <maxHistory>30</maxHistory>
18
+            <totalSizeCap>20GB</totalSizeCap>
19
+            <maxFileSize>50MB</maxFileSize>
20
+        </rollingPolicy>
21
+        <encoder>
22
+            <pattern>%d{yy-MM-dd HH:mm:ss} %-5level [%15.15t] %-40.40logger{39}: %msg %n</pattern>
23
+        </encoder>
24
+    </appender>
25
+
26
+    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender" additivity="false">
27
+        <appender-ref ref="FILE_APPENDER"/>
28
+    </appender>
29
+
30
+    <logger name="com.vcarecity" level="INFO" additivity="false">
31
+        <appender-ref ref="STDOUT"/>
32
+    </logger>
33
+
34
+    <root level="INFO">
35
+        <appender-ref ref="STDOUT"/>
36
+    </root>
37
+
38
+</configuration>

+ 13 - 0
elastic-load-data/src/test/java/com/vcarecity/test/module/DbModuleTest.java 查看文件

@@ -0,0 +1,13 @@
1
+package com.vcarecity.test.module;
2
+
3
+import org.junit.jupiter.api.Test;
4
+
5
+import java.net.MalformedURLException;
6
+
7
+class DbModuleTest {
8
+
9
+    @Test
10
+    void restHighLevelClient() throws MalformedURLException {
11
+
12
+    }
13
+}

+ 24 - 0
elastic-load-data/src/test/java/com/vcarecity/test/service/elastic/QueryDataServiceImplTest.java 查看文件

@@ -0,0 +1,24 @@
1
+package com.vcarecity.test.service.elastic;
2
+
3
+import com.vcarecity.test.HighClientApp;
4
+import com.vcarecity.test.service.QueryDataService;
5
+import org.junit.jupiter.api.BeforeEach;
6
+import org.junit.jupiter.api.Test;
7
+
8
+class QueryDataServiceImplTest {
9
+
10
+    private QueryDataService queryDataService;
11
+
12
+    @BeforeEach
13
+    void setUp() {
14
+        HighClientApp.run(null);
15
+        queryDataService = HighClientApp.injector.getInstance(QueryDataService.class);
16
+    }
17
+
18
+    @Test
19
+    void queryByCondition() throws Exception {
20
+
21
+        queryDataService.queryByCondition("/1", null);
22
+
23
+    }
24
+}

+ 24 - 0
elastic-load-data/src/test/java/com/vcarecity/test/service/oracle/AgencyServiceImplTest.java 查看文件

@@ -0,0 +1,24 @@
1
+package com.vcarecity.test.service.oracle;
2
+
3
+import com.vcarecity.test.HighClientApp;
4
+import com.vcarecity.test.service.AgencyService;
5
+import org.junit.jupiter.api.Assertions;
6
+import org.junit.jupiter.api.BeforeEach;
7
+import org.junit.jupiter.api.Test;
8
+
9
+class AgencyServiceImplTest {
10
+
11
+    AgencyService agencyService;
12
+
13
+    @BeforeEach
14
+    void setUp() {
15
+        HighClientApp.run(null);
16
+        agencyService = HighClientApp.injector.getInstance(AgencyService.class);
17
+    }
18
+
19
+    @Test
20
+    void getAgencyPathDetail() {
21
+        Assertions.assertNotNull(agencyService);
22
+
23
+    }
24
+}

+ 37 - 0
elastic-load-data/src/test/java/com/vcarecity/test/service/oracle/OracleObtainDataServiceImplTest.java 查看文件

@@ -0,0 +1,37 @@
1
+package com.vcarecity.test.service.oracle;
2
+
3
+import com.vcarecity.test.HighClientApp;
4
+import com.vcarecity.test.service.ObtainDataService;
5
+import com.zaxxer.hikari.HikariDataSource;
6
+import org.junit.jupiter.api.AfterAll;
7
+import org.junit.jupiter.api.Assertions;
8
+import org.junit.jupiter.api.BeforeEach;
9
+import org.junit.jupiter.api.Test;
10
+
11
+import java.sql.SQLException;
12
+
13
+class OracleObtainDataServiceImplTest {
14
+
15
+    private ObtainDataService obtainDataService;
16
+
17
+    @BeforeEach
18
+    void setUp() {
19
+        HighClientApp.run(null);
20
+        obtainDataService = HighClientApp.injector.getInstance(ObtainDataService.class);
21
+    }
22
+
23
+    @Test
24
+    void queryDataByPage() throws SQLException {
25
+        Assertions.assertNotNull(obtainDataService);
26
+        System.out.println(obtainDataService.getClass());
27
+
28
+
29
+    }
30
+
31
+
32
+    @AfterAll
33
+    public static void afterAll() {
34
+        final HikariDataSource instance = HighClientApp.injector.getInstance(HikariDataSource.class);
35
+        instance.close();
36
+    }
37
+}

+ 1 - 0
elastic-load-data/src/test/lombok.config 查看文件

@@ -0,0 +1 @@
1
+lombok.log.fieldName = logger

+ 80 - 0
elastic-publish-service/pom.xml 查看文件

@@ -0,0 +1,80 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <parent>
6
+        <artifactId>elastic-data-test</artifactId>
7
+        <groupId>com.vcarecity.test.data</groupId>
8
+        <version>1.0.0</version>
9
+    </parent>
10
+    <modelVersion>4.0.0</modelVersion>
11
+
12
+    <artifactId>elastic-publish-service</artifactId>
13
+
14
+
15
+    <dependencies>
16
+
17
+        <dependency>
18
+            <groupId>com.vcarecity.test.data</groupId>
19
+            <artifactId>common</artifactId>
20
+        </dependency>
21
+
22
+        <dependency>
23
+            <groupId>org.springframework.boot</groupId>
24
+            <artifactId>spring-boot-starter-web</artifactId>
25
+        </dependency>
26
+
27
+        <dependency>
28
+            <groupId>org.mybatis.spring.boot</groupId>
29
+            <artifactId>mybatis-spring-boot-starter</artifactId>
30
+            <version>2.1.1</version>
31
+        </dependency>
32
+        <dependency>
33
+            <groupId>oracle.jdbc</groupId>
34
+            <artifactId>ojdbc8</artifactId>
35
+        </dependency>
36
+
37
+        <dependency>
38
+            <groupId>org.elasticsearch.client</groupId>
39
+            <artifactId>elasticsearch-rest-high-level-client</artifactId>
40
+        </dependency>
41
+        <dependency>
42
+            <groupId>org.elasticsearch.client</groupId>
43
+            <artifactId>elasticsearch-rest-client</artifactId>
44
+        </dependency>
45
+        <dependency>
46
+            <groupId>org.elasticsearch</groupId>
47
+            <artifactId>elasticsearch</artifactId>
48
+        </dependency>
49
+
50
+        <dependency>
51
+            <groupId>org.projectlombok</groupId>
52
+            <artifactId>lombok</artifactId>
53
+            <scope>provided</scope>
54
+        </dependency>
55
+
56
+        <dependency>
57
+            <groupId>org.springframework.boot</groupId>
58
+            <artifactId>spring-boot-starter-test</artifactId>
59
+            <scope>test</scope>
60
+            <exclusions>
61
+                <exclusion>
62
+                    <groupId>org.junit.vintage</groupId>
63
+                    <artifactId>junit-vintage-engine</artifactId>
64
+                </exclusion>
65
+            </exclusions>
66
+        </dependency>
67
+
68
+
69
+    </dependencies>
70
+
71
+    <build>
72
+        <plugins>
73
+            <!--            <plugin>-->
74
+            <!--                <groupId>org.springframework.boot</groupId>-->
75
+            <!--                <artifactId>spring-boot-maven-plugin</artifactId>-->
76
+            <!--            </plugin>-->
77
+        </plugins>
78
+    </build>
79
+
80
+</project>

+ 5 - 0
elastic-publish-service/req/http-client.env.json 查看文件

@@ -0,0 +1,5 @@
1
+{
2
+  "dev": {
3
+    "host": "http://192.168.10.179:7080"
4
+  }
5
+}

+ 24 - 0
elastic-publish-service/req/main-controller.http 查看文件

@@ -0,0 +1,24 @@
1
+POST http://{{host}}/query-unit-agency
2
+Content-Type: application/json
3
+
4
+{
5
+  "agencyPath": "/1",
6
+  "keyword": "鱼峰区",
7
+  "page": 2,
8
+  "size": 10
9
+}
10
+
11
+### unitId 信息
12
+
13
+
14
+POST http://{{host}}/test/query-unit-agency
15
+Content-Type: application/json
16
+
17
+{
18
+  "agencyPath": "/1",
19
+  "keyword": "鱼峰区",
20
+  "page": 2,
21
+  "size": 10
22
+}
23
+
24
+### 详情信息

+ 19 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/ElasticPublishApplication.java 查看文件

@@ -0,0 +1,19 @@
1
+package com.vcarecity.elastic.publish;
2
+
3
+import org.mybatis.spring.annotation.MapperScan;
4
+import org.springframework.boot.SpringApplication;
5
+import org.springframework.boot.autoconfigure.SpringBootApplication;
6
+
7
+/**
8
+ * @author Kerry on 19/12/11
9
+ */
10
+
11
+@MapperScan("com.vcarecity.elastic.publish.mapper")
12
+@SpringBootApplication
13
+public class ElasticPublishApplication {
14
+
15
+    public static void main(String[] args) {
16
+        // start spring boot application
17
+        SpringApplication.run(ElasticPublishApplication.class, args);
18
+    }
19
+}

+ 56 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/config/ElasticConfig.java 查看文件

@@ -0,0 +1,56 @@
1
+package com.vcarecity.elastic.publish.config;
2
+
3
+import org.apache.http.HttpHost;
4
+import org.apache.http.auth.AuthScope;
5
+import org.apache.http.auth.Credentials;
6
+import org.apache.http.auth.UsernamePasswordCredentials;
7
+import org.apache.http.client.CredentialsProvider;
8
+import org.apache.http.impl.client.BasicCredentialsProvider;
9
+import org.elasticsearch.client.RestClient;
10
+import org.elasticsearch.client.RestClientBuilder;
11
+import org.elasticsearch.client.RestHighLevelClient;
12
+import org.springframework.boot.autoconfigure.elasticsearch.rest.RestClientProperties;
13
+import org.springframework.context.annotation.Bean;
14
+import org.springframework.context.annotation.Configuration;
15
+
16
+import java.net.MalformedURLException;
17
+import java.net.URL;
18
+import java.util.List;
19
+
20
+/**
21
+ * @author Kerry on 19/12/11
22
+ */
23
+
24
+@Configuration
25
+public class ElasticConfig {
26
+
27
+    @Bean(destroyMethod = "close")
28
+    public RestHighLevelClient restHighLevelClient(RestClientProperties properties) throws MalformedURLException {
29
+
30
+        final List<String> uris = properties.getUris();
31
+        HttpHost[] httpHosts = new HttpHost[uris.size()];
32
+        for (int i = 0; i < uris.size(); i++) {
33
+            final URL url = new URL(uris.get(i));
34
+            httpHosts[i] = new HttpHost(url.getHost(), url.getPort(), url.getProtocol());
35
+        }
36
+
37
+        final RestClientBuilder builder = RestClient.builder(httpHosts);
38
+
39
+        CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
40
+        Credentials credentials = new UsernamePasswordCredentials(properties.getUsername(), properties.getPassword());
41
+        credentialsProvider.setCredentials(AuthScope.ANY, credentials);
42
+
43
+        builder.setHttpClientConfigCallback(http -> {
44
+            http.setDefaultCredentialsProvider(credentialsProvider);
45
+            return http;
46
+        });
47
+
48
+        builder.setRequestConfigCallback(requestBuilder -> {
49
+            requestBuilder.setConnectTimeout((int) properties.getConnectionTimeout().getSeconds());
50
+            return requestBuilder;
51
+        });
52
+
53
+        return new RestHighLevelClient(builder);
54
+    }
55
+
56
+}

+ 25 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/config/MapperConfig.java 查看文件

@@ -0,0 +1,25 @@
1
+package com.vcarecity.elastic.publish.config;
2
+
3
+import com.fasterxml.jackson.annotation.JsonInclude;
4
+import com.fasterxml.jackson.databind.DeserializationFeature;
5
+import com.fasterxml.jackson.databind.ObjectMapper;
6
+import org.springframework.context.annotation.Bean;
7
+import org.springframework.context.annotation.Configuration;
8
+
9
+/**
10
+ * @author Kerry on 19/12/11
11
+ */
12
+
13
+@Configuration
14
+public class MapperConfig {
15
+
16
+    @Bean
17
+    public ObjectMapper objectMapper() {
18
+        ObjectMapper objectMapper = new ObjectMapper();
19
+        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
20
+        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
21
+        return objectMapper;
22
+    }
23
+
24
+
25
+}

+ 42 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/controller/MainController.java 查看文件

@@ -0,0 +1,42 @@
1
+package com.vcarecity.elastic.publish.controller;
2
+
3
+import com.vcarecity.elastic.publish.pojo.dto.UnitAgencyDTO;
4
+import com.vcarecity.elastic.publish.pojo.query.UnitAgencyQuery;
5
+import com.vcarecity.elastic.publish.service.UnitService;
6
+import org.springframework.web.bind.annotation.PostMapping;
7
+import org.springframework.web.bind.annotation.RequestBody;
8
+import org.springframework.web.bind.annotation.RestController;
9
+
10
+import javax.validation.Valid;
11
+import java.io.IOException;
12
+import java.util.List;
13
+import java.util.stream.Collectors;
14
+
15
+/**
16
+ * @author Kerry on 19/12/11
17
+ */
18
+
19
+@RestController
20
+public class MainController {
21
+
22
+    private final UnitService unitService;
23
+
24
+    public MainController(UnitService unitService) {
25
+        this.unitService = unitService;
26
+    }
27
+
28
+    @PostMapping("/query-unit-agency")
29
+    public Object queryUnitAgency(@RequestBody @Valid UnitAgencyQuery unitAgencyQuery) throws IOException {
30
+        final List<UnitAgencyDTO> unitAgencyByQuery = unitService.getUnitAgencyByQuery(unitAgencyQuery.getAgencyPath(), unitAgencyQuery.getKeyword(),
31
+                unitAgencyQuery.getPage(), unitAgencyQuery.getSize(), "unit-agency");
32
+        return unitAgencyByQuery.stream().map(UnitAgencyDTO::getUnitId).collect(Collectors.toList());
33
+    }
34
+
35
+    @PostMapping("/test/query-unit-agency")
36
+    public Object testQueryUnitAgency(@RequestBody @Valid UnitAgencyQuery unitAgencyQuery) throws IOException {
37
+        return unitService.getUnitAgencyByQuery(unitAgencyQuery.getAgencyPath(), unitAgencyQuery.getKeyword(),
38
+                unitAgencyQuery.getPage(), unitAgencyQuery.getSize(), "unit-agency");
39
+    }
40
+
41
+
42
+}

+ 18 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/controller/TestController.java 查看文件

@@ -0,0 +1,18 @@
1
+package com.vcarecity.elastic.publish.controller;
2
+
3
+import org.springframework.web.bind.annotation.GetMapping;
4
+import org.springframework.web.bind.annotation.RestController;
5
+
6
+/**
7
+ * @author Kerry on 19/12/11
8
+ */
9
+
10
+@RestController
11
+public class TestController {
12
+
13
+    @GetMapping("/")
14
+    public Object index() {
15
+        return "test index page";
16
+    }
17
+
18
+}

+ 16 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/entity/AgencyEntity.java 查看文件

@@ -0,0 +1,16 @@
1
+package com.vcarecity.elastic.publish.entity;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * @author VcKerry on 12/17/19
7
+ */
8
+
9
+@Data
10
+public class AgencyEntity {
11
+
12
+    private Long agencyId;
13
+    private String agencyPath;
14
+    private String agencyName;
15
+    private Integer isDeleted;
16
+}

+ 14 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/entity/BuildingEntity.java 查看文件

@@ -0,0 +1,14 @@
1
+package com.vcarecity.elastic.publish.entity;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * @author VcKerry on 12/17/19
7
+ */
8
+
9
+@Data
10
+public class BuildingEntity {
11
+    private Long buildingId;
12
+    private String nameOfBuilding;
13
+    private Integer isDeleted;
14
+}

+ 33 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/entity/UnitAgencyMergeEntity.java 查看文件

@@ -0,0 +1,33 @@
1
+package com.vcarecity.elastic.publish.entity;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * @author VcKerry on 12/17/19
7
+ */
8
+
9
+@Data
10
+public class UnitAgencyMergeEntity {
11
+
12
+    private Long unitId;
13
+
14
+    private String dtuNo;
15
+
16
+    private String puserCode;
17
+
18
+    private Long agencyId;
19
+
20
+    private String agencyPath;
21
+
22
+    private String agencyName;
23
+
24
+    private Long buildingId;
25
+
26
+    private String nameOfBuilding;
27
+
28
+    private Long unitTypeId;
29
+
30
+    private String unitType;
31
+
32
+    private Integer isDeleted;
33
+}

+ 15 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/entity/UnitEntity.java 查看文件

@@ -0,0 +1,15 @@
1
+package com.vcarecity.elastic.publish.entity;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * @author VcKerry on 12/17/19
7
+ */
8
+
9
+@Data
10
+public class UnitEntity {
11
+    private Long unitId;
12
+    private String dtuNo;
13
+    private String puserCode;
14
+    private Integer isDeleted;
15
+}

+ 38 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/mapper/AgencyMapper.java 查看文件

@@ -0,0 +1,38 @@
1
+package com.vcarecity.elastic.publish.mapper;
2
+
3
+import com.vcarecity.elastic.publish.entity.AgencyEntity;
4
+import com.vcarecity.elastic.publish.entity.UnitAgencyMergeEntity;
5
+import org.apache.ibatis.annotations.Mapper;
6
+import org.apache.ibatis.annotations.Param;
7
+
8
+import java.util.List;
9
+
10
+/**
11
+ * @author VcKerry on 12/17/19
12
+ */
13
+
14
+@Mapper
15
+public interface AgencyMapper {
16
+
17
+
18
+    /**
19
+     * find update
20
+     *
21
+     * @param fromDate
22
+     * @param toDate
23
+     * @return
24
+     */
25
+    List<AgencyEntity> findUpdateList(@Param("fromDate") String fromDate, @Param("toDate") String toDate);
26
+
27
+
28
+    /**
29
+     * find update
30
+     *
31
+     * @param fromDate
32
+     * @param toDate
33
+     * @return
34
+     */
35
+    List<UnitAgencyMergeEntity> findUpdateUaList(@Param("fromDate") String fromDate, @Param("toDate") String toDate);
36
+
37
+
38
+}

+ 27 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/mapper/BuildingMapper.java 查看文件

@@ -0,0 +1,27 @@
1
+package com.vcarecity.elastic.publish.mapper;
2
+
3
+import com.vcarecity.elastic.publish.entity.BuildingEntity;
4
+import org.apache.ibatis.annotations.Mapper;
5
+import org.apache.ibatis.annotations.Param;
6
+
7
+import java.util.List;
8
+
9
+/**
10
+ * @author VcKerry on 12/17/19
11
+ */
12
+
13
+@Mapper
14
+public interface BuildingMapper {
15
+
16
+
17
+    /**
18
+     * find update
19
+     *
20
+     * @param fromDate
21
+     * @param toDate
22
+     * @return
23
+     */
24
+    List<BuildingEntity> findUpdateList(@Param("fromDate") String fromDate, @Param("toDate") String toDate);
25
+
26
+
27
+}

+ 38 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/mapper/UnitMapper.java 查看文件

@@ -0,0 +1,38 @@
1
+package com.vcarecity.elastic.publish.mapper;
2
+
3
+import com.vcarecity.elastic.publish.entity.UnitAgencyMergeEntity;
4
+import com.vcarecity.elastic.publish.entity.UnitEntity;
5
+import org.apache.ibatis.annotations.Mapper;
6
+import org.apache.ibatis.annotations.Param;
7
+
8
+import java.util.List;
9
+
10
+/**
11
+ * @author VcKerry on 12/17/19
12
+ */
13
+
14
+@Mapper
15
+public interface UnitMapper {
16
+
17
+
18
+    /**
19
+     * find update
20
+     *
21
+     * @param fromDate
22
+     * @param toDate
23
+     * @return
24
+     */
25
+    List<UnitEntity> findUpdateList(@Param("fromDate") String fromDate, @Param("toDate") String toDate);
26
+
27
+
28
+    /**
29
+     * find update
30
+     *
31
+     * @param fromDate
32
+     * @param toDate
33
+     * @return
34
+     */
35
+    List<UnitAgencyMergeEntity> findUpdateUaList(@Param("fromDate") String fromDate, @Param("toDate") String toDate);
36
+
37
+
38
+}

+ 15 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/pojo/dto/UnitAgencyDTO.java 查看文件

@@ -0,0 +1,15 @@
1
+package com.vcarecity.elastic.publish.pojo.dto;
2
+
3
+import lombok.Data;
4
+
5
+/**
6
+ * @author Kerry on 19/12/11
7
+ */
8
+
9
+@Data
10
+public class UnitAgencyDTO {
11
+    private Long unitId;
12
+    private String agencyName;
13
+    private String agencyDetail;
14
+    private String nameOfBuilding;
15
+}

+ 26 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/pojo/query/UnitAgencyQuery.java 查看文件

@@ -0,0 +1,26 @@
1
+package com.vcarecity.elastic.publish.pojo.query;
2
+
3
+import lombok.Data;
4
+
5
+import javax.validation.constraints.*;
6
+
7
+/**
8
+ * @author Kerry on 19/12/11
9
+ */
10
+
11
+@Data
12
+public class UnitAgencyQuery {
13
+    @NotNull
14
+    @NotBlank
15
+    @NotEmpty
16
+    private String agencyPath;
17
+
18
+    private String keyword;
19
+
20
+    @Min(1)
21
+    private int page = 1;
22
+
23
+    @Min(1)
24
+    private int size = 100;
25
+
26
+}

+ 26 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/service/CheckTimeService.java 查看文件

@@ -0,0 +1,26 @@
1
+package com.vcarecity.elastic.publish.service;
2
+
3
+/**
4
+ * @author VcKerry on 12/17/19
5
+ */
6
+
7
+public interface CheckTimeService {
8
+
9
+
10
+    /**
11
+     * 获取
12
+     *
13
+     * @param key
14
+     * @return
15
+     */
16
+    String getLastDateTime(String key);
17
+
18
+
19
+    /**
20
+     * set
21
+     *
22
+     * @param key
23
+     * @param lastDateTime
24
+     */
25
+    void setLastDateTime(String key, long lastDateTime);
26
+}

+ 12 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/service/QueryElasticService.java 查看文件

@@ -0,0 +1,12 @@
1
+package com.vcarecity.elastic.publish.service;
2
+
3
+import java.util.List;
4
+
5
+/**
6
+ * @author VcKerry on 12/17/19
7
+ */
8
+
9
+public interface QueryElasticService {
10
+
11
+    List<Long> queryById();
12
+}

+ 27 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/service/UnitService.java 查看文件

@@ -0,0 +1,27 @@
1
+package com.vcarecity.elastic.publish.service;
2
+
3
+import com.vcarecity.elastic.publish.pojo.dto.UnitAgencyDTO;
4
+
5
+import java.io.IOException;
6
+import java.util.List;
7
+
8
+/**
9
+ * @author Kerry on 19/12/11
10
+ */
11
+
12
+public interface UnitService {
13
+
14
+    /**
15
+     * test
16
+     *
17
+     * @param agencyPath
18
+     * @param inputKeyword
19
+     * @param page
20
+     * @param size
21
+     * @param indices
22
+     * @return
23
+     * @throws IOException
24
+     */
25
+    List<UnitAgencyDTO> getUnitAgencyByQuery(String agencyPath, String inputKeyword, int page, int size, String... indices) throws IOException;
26
+
27
+}

+ 22 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/service/UpdateElasticService.java 查看文件

@@ -0,0 +1,22 @@
1
+package com.vcarecity.elastic.publish.service;
2
+
3
+import com.vcarecity.elastic.publish.entity.UnitAgencyMergeEntity;
4
+
5
+import java.io.IOException;
6
+import java.util.List;
7
+
8
+/**
9
+ * @author Kerry on 12/17/19
10
+ */
11
+
12
+public interface UpdateElasticService {
13
+
14
+    void updateTest() throws IOException;
15
+
16
+    void updateUnit(List<UnitAgencyMergeEntity> list) throws IOException;
17
+
18
+
19
+    void updateAgency(List<UnitAgencyMergeEntity> list) throws IOException;
20
+
21
+
22
+}

+ 38 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/service/impl/CheckTimeServiceImpl.java 查看文件

@@ -0,0 +1,38 @@
1
+package com.vcarecity.elastic.publish.service.impl;
2
+
3
+import com.vcarecity.elastic.publish.service.CheckTimeService;
4
+import com.vcarecity.elastic.publish.util.DateUtil;
5
+import org.springframework.stereotype.Service;
6
+
7
+import java.time.LocalDateTime;
8
+import java.time.ZoneId;
9
+import java.util.Date;
10
+import java.util.Map;
11
+import java.util.concurrent.ConcurrentHashMap;
12
+
13
+/**
14
+ * @author VcKerry on 12/17/19
15
+ */
16
+
17
+@Service
18
+public class CheckTimeServiceImpl implements CheckTimeService {
19
+
20
+    private final Map<String, Long> timeCache = new ConcurrentHashMap<>(4);
21
+
22
+
23
+    @Override
24
+    public String getLastDateTime(String key) {
25
+
26
+        Long aLong = timeCache.get(key);
27
+        if (aLong == null) {
28
+            aLong = System.currentTimeMillis();
29
+            timeCache.put(key, aLong);
30
+        }
31
+        return LocalDateTime.ofInstant(new Date(aLong).toInstant(), ZoneId.systemDefault()).format(DateUtil.DATE_TIME_FORMATTER);
32
+    }
33
+
34
+    @Override
35
+    public void setLastDateTime(String key, long lastDateTime) {
36
+        timeCache.put(key, lastDateTime);
37
+    }
38
+}

+ 18 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/service/impl/QueryElasticServiceImpl.java 查看文件

@@ -0,0 +1,18 @@
1
+package com.vcarecity.elastic.publish.service.impl;
2
+
3
+import com.vcarecity.elastic.publish.service.QueryElasticService;
4
+import org.springframework.stereotype.Service;
5
+
6
+import java.util.List;
7
+
8
+/**
9
+ * @author VcKerry on 12/17/19
10
+ */
11
+
12
+@Service
13
+public class QueryElasticServiceImpl implements QueryElasticService {
14
+    @Override
15
+    public List<Long> queryById() {
16
+        return null;
17
+    }
18
+}

+ 304 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/service/impl/UnitServiceImpl.java 查看文件

@@ -0,0 +1,304 @@
1
+package com.vcarecity.elastic.publish.service.impl;
2
+
3
+import com.fasterxml.jackson.databind.ObjectMapper;
4
+import com.vcarecity.elastic.publish.pojo.dto.UnitAgencyDTO;
5
+import com.vcarecity.elastic.publish.service.UnitService;
6
+import com.vcarecity.elastic.util.AgencyPathUtil;
7
+import lombok.extern.slf4j.Slf4j;
8
+import org.elasticsearch.action.search.SearchRequest;
9
+import org.elasticsearch.action.search.SearchResponse;
10
+import org.elasticsearch.client.RequestOptions;
11
+import org.elasticsearch.client.RestHighLevelClient;
12
+import org.elasticsearch.index.query.BoolQueryBuilder;
13
+import org.elasticsearch.index.query.QueryBuilder;
14
+import org.elasticsearch.index.query.QueryBuilders;
15
+import org.elasticsearch.index.query.TermQueryBuilder;
16
+import org.elasticsearch.search.SearchHit;
17
+import org.elasticsearch.search.SearchHits;
18
+import org.elasticsearch.search.builder.SearchSourceBuilder;
19
+import org.springframework.stereotype.Service;
20
+
21
+import java.io.IOException;
22
+import java.util.ArrayList;
23
+import java.util.Collections;
24
+import java.util.List;
25
+import java.util.Map;
26
+
27
+/**
28
+ * @author Kerry on 19/12/11
29
+ */
30
+
31
+@Slf4j
32
+@Service
33
+public class UnitServiceImpl implements UnitService {
34
+
35
+    private final RestHighLevelClient restHighLevelClient;
36
+    private final ObjectMapper objectMapper;
37
+
38
+    public UnitServiceImpl(RestHighLevelClient restHighLevelClient,
39
+                           ObjectMapper objectMapper) {
40
+        this.restHighLevelClient = restHighLevelClient;
41
+        this.objectMapper = objectMapper;
42
+    }
43
+
44
+    @Override
45
+    public List<UnitAgencyDTO> getUnitAgencyByQuery(String agencyPath, String inputKeyword, int page, int size, String... indices) throws IOException {
46
+        List<Integer> agencyIdList = AgencyPathUtil.splitAgencyId(agencyPath);
47
+        if (agencyIdList.isEmpty()) {
48
+            return Collections.emptyList();
49
+        }
50
+        QueryBuilder agencyIdBoolQuery = agencyIdListCondition(agencyIdList);
51
+        QueryBuilder keywordBoolQuery = multiInputParamKeywordBool(inputKeyword);
52
+
53
+        BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery().must(agencyIdBoolQuery);
54
+
55
+        if (keywordBoolQuery != null) {
56
+            queryBuilder.must(keywordBoolQuery);
57
+        }
58
+
59
+        String[] queryColumns = new String[]{"unitId", "nameOfBuilding", "agencyDetail", "agencyName"};
60
+
61
+        SearchRequest searchRequest = new SearchRequest();
62
+        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
63
+        searchSourceBuilder.query(queryBuilder);
64
+        searchSourceBuilder.fetchSource(queryColumns, new String[]{});
65
+        searchSourceBuilder.from((page - 1) * size);
66
+        searchSourceBuilder.size(size);
67
+        searchRequest.source(searchSourceBuilder);
68
+        searchRequest.indices(indices);
69
+
70
+
71
+        logger.debug("getUnitAgencyByQuery:{}", searchSourceBuilder);
72
+
73
+        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
74
+
75
+        final SearchHits hits = searchResponse.getHits();
76
+        List<UnitAgencyDTO> res = new ArrayList<>(hits.getHits().length);
77
+        for (SearchHit hit : hits.getHits()) {
78
+            UnitAgencyDTO unitAgencyDTO = objectMapper.readValue(hit.getSourceAsString(), UnitAgencyDTO.class);
79
+            res.add(unitAgencyDTO);
80
+        }
81
+        return res;
82
+    }
83
+
84
+    /**
85
+     * agency id
86
+     * <pre>
87
+     * {
88
+     *   "size" : 100,
89
+     *   "query" : {
90
+     *     "bool" : {
91
+     *       "must" : [
92
+     *         {
93
+     *           "bool" : {
94
+     *             "must" : [
95
+     *               {
96
+     *                 "term" : {
97
+     *                   "aId0" : {
98
+     *                     "value" : 1,
99
+     *                     "boost" : 1.0
100
+     *                   }
101
+     *                 }
102
+     *               },
103
+     *               {
104
+     *                 "term" : {
105
+     *                   "aId1" : {
106
+     *                     "value" : 3,
107
+     *                     "boost" : 1.0
108
+     *                   }
109
+     *                 }
110
+     *               }
111
+     *             ],
112
+     *             "adjust_pure_negative" : true,
113
+     *             "boost" : 1.0
114
+     *           }
115
+     *         },
116
+     *         {
117
+     *           "term" : {
118
+     *             "aId2" : {
119
+     *               "value" : 67921,
120
+     *               "boost" : 1.0
121
+     *             }
122
+     *           }
123
+     *         }
124
+     *       ],
125
+     *       "adjust_pure_negative" : true,
126
+     *       "boost" : 1.0
127
+     *     }
128
+     *   },
129
+     *   "_source" : {
130
+     *     "includes" : [
131
+     *       "unitId"
132
+     *     ],
133
+     *     "excludes" : [ ]
134
+     *   },
135
+     *   "sort" : [
136
+     *     {
137
+     *       "_doc" : {
138
+     *         "order" : "asc"
139
+     *       }
140
+     *     }
141
+     *   ]
142
+     * }
143
+     * </pre>
144
+     *
145
+     * @param agencyIds
146
+     * @return
147
+     */
148
+    private QueryBuilder agencyIdListCondition(List<Integer> agencyIds) {
149
+
150
+        if (agencyIds == null || agencyIds.size() == 0) {
151
+            return null;
152
+        }
153
+
154
+        boolean isOnlyOnceId = agencyIds.size() == 1;
155
+
156
+        final BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
157
+
158
+        final Map<String, Integer> map = AgencyPathUtil.agencyPathQueryMap(agencyIds);
159
+
160
+        for (Map.Entry<String, Integer> entry : map.entrySet()) {
161
+            TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery(entry.getKey(), entry.getValue());
162
+            if (isOnlyOnceId) {
163
+                return termQueryBuilder;
164
+            }
165
+            boolQueryBuilder.must(termQueryBuilder);
166
+        }
167
+        return boolQueryBuilder;
168
+    }
169
+
170
+
171
+    /**
172
+     * key word
173
+     * <pre>
174
+     *  {
175
+     *   "size" : 100,
176
+     *   "query" : {
177
+     *     "bool" : {
178
+     *       "must" : [
179
+     *         {
180
+     *           "bool" : {
181
+     *             "must" : [
182
+     *               {
183
+     *                 "bool" : {
184
+     *                   "must" : [
185
+     *                     {
186
+     *                       "term" : {
187
+     *                         "aId0" : {
188
+     *                           "value" : 1,
189
+     *                           "boost" : 1.0
190
+     *                         }
191
+     *                       }
192
+     *                     },
193
+     *                     {
194
+     *                       "term" : {
195
+     *                         "aId1" : {
196
+     *                           "value" : 3,
197
+     *                           "boost" : 1.0
198
+     *                         }
199
+     *                       }
200
+     *                     }
201
+     *                   ],
202
+     *                   "adjust_pure_negative" : true,
203
+     *                   "boost" : 1.0
204
+     *                 }
205
+     *               },
206
+     *               {
207
+     *                 "term" : {
208
+     *                   "aId2" : {
209
+     *                     "value" : 67921,
210
+     *                     "boost" : 1.0
211
+     *                   }
212
+     *                 }
213
+     *               }
214
+     *             ],
215
+     *             "adjust_pure_negative" : true,
216
+     *             "boost" : 1.0
217
+     *           }
218
+     *         },
219
+     *         {
220
+     *           "bool" : {
221
+     *             "should" : [
222
+     *               {
223
+     *                 "bool" : {
224
+     *                   "should" : [
225
+     *                     {
226
+     *                       "wildcard" : {
227
+     *                         "agencyName.keyword" : {
228
+     *                           "wildcard" : "*鱼峰区*",
229
+     *                           "boost" : 1.0
230
+     *                         }
231
+     *                       }
232
+     *                     },
233
+     *                     {
234
+     *                       "wildcard" : {
235
+     *                         "agencyDetail.keyword" : {
236
+     *                           "wildcard" : "*鱼峰区*",
237
+     *                           "boost" : 1.0
238
+     *                         }
239
+     *                       }
240
+     *                     }
241
+     *                   ],
242
+     *                   "adjust_pure_negative" : true,
243
+     *                   "boost" : 1.0
244
+     *                 }
245
+     *               },
246
+     *               {
247
+     *                 "wildcard" : {
248
+     *                   "nameOfBuilding.keyword" : {
249
+     *                     "wildcard" : "*鱼峰区*",
250
+     *                     "boost" : 1.0
251
+     *                   }
252
+     *                 }
253
+     *               }
254
+     *             ],
255
+     *             "adjust_pure_negative" : true,
256
+     *             "boost" : 1.0
257
+     *           }
258
+     *         }
259
+     *       ],
260
+     *       "adjust_pure_negative" : true,
261
+     *       "boost" : 1.0
262
+     *     }
263
+     *   },
264
+     *   "_source" : {
265
+     *     "includes" : [
266
+     *       "unitId"
267
+     *     ],
268
+     *     "excludes" : [ ]
269
+     *   },
270
+     *   "sort" : [
271
+     *     {
272
+     *       "_doc" : {
273
+     *         "order" : "asc"
274
+     *       }
275
+     *     }
276
+     *   ]
277
+     * }
278
+     * </pre>
279
+     *
280
+     * @param keyword
281
+     * @return
282
+     */
283
+    private BoolQueryBuilder multiInputParamKeywordBool(String keyword) {
284
+        if (keyword == null || keyword.trim().length() == 0) {
285
+            return null;
286
+        }
287
+
288
+        final String[] keyNames = new String[]{
289
+                "agencyName.keyword",
290
+                "agencyDetail.keyword",
291
+                "nameOfBuilding.keyword",
292
+        };
293
+
294
+        final BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
295
+
296
+        for (String kn : keyNames) {
297
+            QueryBuilder queryBuilder = QueryBuilders.wildcardQuery(kn, "*" + keyword + "*");
298
+            // QueryBuilder queryBuilder = QueryBuilders.matchQuery(kn, keyword);
299
+            boolQueryBuilder.should(queryBuilder);
300
+        }
301
+        return boolQueryBuilder;
302
+    }
303
+
304
+}

+ 114 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/service/impl/UpdateElasticServiceImpl.java 查看文件

@@ -0,0 +1,114 @@
1
+package com.vcarecity.elastic.publish.service.impl;
2
+
3
+import com.vcarecity.elastic.publish.entity.UnitAgencyMergeEntity;
4
+import com.vcarecity.elastic.publish.service.UpdateElasticService;
5
+import org.elasticsearch.client.RequestOptions;
6
+import org.elasticsearch.client.RestHighLevelClient;
7
+import org.elasticsearch.index.query.QueryBuilders;
8
+import org.elasticsearch.index.reindex.BulkByScrollResponse;
9
+import org.elasticsearch.index.reindex.DeleteByQueryRequest;
10
+import org.elasticsearch.index.reindex.UpdateByQueryRequest;
11
+import org.elasticsearch.script.Script;
12
+import org.elasticsearch.script.ScriptType;
13
+import org.springframework.stereotype.Service;
14
+
15
+import java.io.IOException;
16
+import java.util.ArrayList;
17
+import java.util.HashMap;
18
+import java.util.List;
19
+import java.util.Map;
20
+
21
+/**
22
+ * @author Kerry on 12/17/19
23
+ */
24
+
25
+@Service
26
+public class UpdateElasticServiceImpl implements UpdateElasticService {
27
+
28
+    public static final String INDEX = "unit-agency";
29
+
30
+    private final RestHighLevelClient restHighLevelClient;
31
+
32
+    public UpdateElasticServiceImpl(RestHighLevelClient restHighLevelClient) {
33
+        this.restHighLevelClient = restHighLevelClient;
34
+    }
35
+
36
+
37
+    @Override
38
+    public void updateTest() throws IOException {
39
+
40
+        Map<String, Object> params = new HashMap<>();
41
+        params.put("dtuNo", "000000000001");
42
+        params.put("puserCode", "/0/000000000001/1/12345678/");
43
+
44
+
45
+        UpdateByQueryRequest request = new UpdateByQueryRequest("unit-agency");
46
+        request.setQuery(QueryBuilders.termQuery("unitId", 12345678));
47
+        request.setMaxDocs(1);
48
+        request.setBatchSize(1);
49
+        request.setScript(new Script(ScriptType.INLINE, "painless", getPainlessCode(params), params));
50
+        request.setRefresh(true);
51
+
52
+
53
+        BulkByScrollResponse response = restHighLevelClient.updateByQuery(request, RequestOptions.DEFAULT);
54
+
55
+        System.out.println(response.getStatus());
56
+
57
+    }
58
+
59
+
60
+    private String getPainlessCode(Map<String, Object> params) {
61
+        String[] items = new String[params.size()];
62
+        int index = 0;
63
+        for (String key : params.keySet()) {
64
+            items[index++] = "ctx._source." + key + "=params." + key;
65
+        }
66
+        return String.join(";", items);
67
+    }
68
+
69
+
70
+    @Override
71
+    public void updateUnit(List<UnitAgencyMergeEntity> list) throws IOException {
72
+        List<Long> deleteId = new ArrayList<>();
73
+        for (UnitAgencyMergeEntity uae : list) {
74
+            if (uae.getIsDeleted() == 1) {
75
+                deleteId.add(uae.getUnitId());
76
+            }
77
+        }
78
+        deleteById("unitId", deleteId);
79
+
80
+    }
81
+
82
+    @Override
83
+    public void updateAgency(List<UnitAgencyMergeEntity> list) throws IOException {
84
+        List<UnitAgencyMergeEntity> updateList = new ArrayList<>();
85
+        List<Long> deleteId = new ArrayList<>();
86
+        for (UnitAgencyMergeEntity uae : list) {
87
+            if (uae.getIsDeleted() == 1) {
88
+                deleteId.add(uae.getAgencyId());
89
+            } else if (uae.getIsDeleted() == 0) {
90
+                updateList.add(uae);
91
+            }
92
+        }
93
+        deleteById("agencyId", deleteId);
94
+        list.clear();
95
+
96
+    }
97
+
98
+
99
+    private void insertData(List<UnitAgencyMergeEntity> list) {
100
+
101
+    }
102
+
103
+    private void deleteById(String key, List<Long> deleteId) throws IOException {
104
+        if (deleteId == null || deleteId.isEmpty()) {
105
+            return;
106
+        }
107
+        for (Long id : deleteId) {
108
+            DeleteByQueryRequest request = new DeleteByQueryRequest(INDEX);
109
+            request.setQuery(QueryBuilders.termQuery(key, id));
110
+            restHighLevelClient.deleteByQuery(request, RequestOptions.DEFAULT);
111
+        }
112
+    }
113
+
114
+}

+ 65 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/task/CheckUpdateTask.java 查看文件

@@ -0,0 +1,65 @@
1
+package com.vcarecity.elastic.publish.task;
2
+
3
+import com.vcarecity.elastic.publish.entity.UnitAgencyMergeEntity;
4
+import com.vcarecity.elastic.publish.mapper.AgencyMapper;
5
+import com.vcarecity.elastic.publish.mapper.BuildingMapper;
6
+import com.vcarecity.elastic.publish.mapper.UnitMapper;
7
+import com.vcarecity.elastic.publish.service.CheckTimeService;
8
+import com.vcarecity.elastic.publish.util.DateUtil;
9
+
10
+import java.time.LocalDateTime;
11
+import java.time.ZoneId;
12
+import java.util.Date;
13
+import java.util.List;
14
+
15
+/**
16
+ * @author Kerry on 19/12/11
17
+ */
18
+
19
+//@Component
20
+public class CheckUpdateTask {
21
+
22
+    private final CheckTimeService checkTimeService;
23
+    private final AgencyMapper agencyMapper;
24
+    private final UnitMapper unitMapper;
25
+    private final BuildingMapper buildingMapper;
26
+
27
+    public CheckUpdateTask(CheckTimeService checkTimeService, AgencyMapper agencyMapper,
28
+                           UnitMapper unitMapper,
29
+                           BuildingMapper buildingMapper) {
30
+        this.checkTimeService = checkTimeService;
31
+        this.agencyMapper = agencyMapper;
32
+        this.unitMapper = unitMapper;
33
+        this.buildingMapper = buildingMapper;
34
+    }
35
+
36
+
37
+    public void checkTask() {
38
+
39
+        long curCheckTime = System.currentTimeMillis();
40
+        String toDateTime = LocalDateTime.ofInstant(new Date(curCheckTime).toInstant(), ZoneId.systemDefault()).format(DateUtil.DATE_TIME_FORMATTER);
41
+
42
+        List<UnitAgencyMergeEntity> updateUaList;
43
+        String fromDateTime;
44
+
45
+        fromDateTime = checkTimeService.getLastDateTime("T_UNIT");
46
+        updateUaList = unitMapper.findUpdateUaList(fromDateTime, toDateTime);
47
+        if (!updateUaList.isEmpty()) {
48
+
49
+        }
50
+        checkTimeService.setLastDateTime("T_UNIT", curCheckTime);
51
+        updateUaList.clear();
52
+
53
+        fromDateTime = checkTimeService.getLastDateTime("T_AGENCY");
54
+        updateUaList = agencyMapper.findUpdateUaList(fromDateTime, toDateTime);
55
+
56
+        if (!updateUaList.isEmpty()) {
57
+
58
+        }
59
+        checkTimeService.setLastDateTime("T_AGENCY", curCheckTime);
60
+        updateUaList.clear();
61
+
62
+
63
+    }
64
+
65
+}

+ 12 - 0
elastic-publish-service/src/main/java/com/vcarecity/elastic/publish/util/DateUtil.java 查看文件

@@ -0,0 +1,12 @@
1
+package com.vcarecity.elastic.publish.util;
2
+
3
+import java.time.format.DateTimeFormatter;
4
+
5
+/**
6
+ * @author VcKerry on 12/17/19
7
+ */
8
+
9
+public class DateUtil {
10
+    public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
11
+    public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern(DATE_FORMAT);
12
+}

+ 1 - 0
elastic-publish-service/src/main/lombok.config 查看文件

@@ -0,0 +1 @@
1
+lombok.log.fieldName = logger

+ 24 - 0
elastic-publish-service/src/main/resources/application-dev.yml 查看文件

@@ -0,0 +1,24 @@
1
+server:
2
+  port: 7080
3
+spring:
4
+  datasource:
5
+    url: jdbc:oracle:thin:@192.168.10.112:1521:orcl
6
+    username: C##FMMP
7
+    password: vcare~1(^_^)
8
+  elasticsearch:
9
+    rest:
10
+      uris:
11
+        - http://192.168.10.241:9200
12
+        - http://192.168.10.242:9200
13
+        - http://192.168.10.243:9200
14
+      username: elastic
15
+      password: abcd!234
16
+
17
+debug: true
18
+logging:
19
+  level:
20
+    com:
21
+      vcarecity: debug
22
+mybatis:
23
+  type-aliases-package: com.vcarecity.elastic.publish.entity
24
+  mapper-locations: classpath:mapper/*.xml

+ 3 - 0
elastic-publish-service/src/main/resources/application.yml 查看文件

@@ -0,0 +1,3 @@
1
+spring:
2
+  profiles:
3
+    active: dev

+ 51 - 0
elastic-publish-service/src/main/resources/mapper/AgencyMapper.xml 查看文件

@@ -0,0 +1,51 @@
1
+<?xml version="1.0" encoding="UTF-8" ?>
2
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
3
+
4
+<mapper namespace="com.vcarecity.elastic.publish.mapper.AgencyMapper">
5
+
6
+
7
+    <select id="findUpdateList" resultType="agencyEntity">
8
+        select AGENCY_ID,AGENCY_PATH,AGENCY_NAME,ISDELETED from T_AGENCY where UPDATESTAMP between to_date('${fromDate}','YYYY-MM-DD HH24:MI:SS')
9
+        and to_date('${toDate}','YYYY-MM-DD HH24:MI:SS')
10
+    </select>
11
+
12
+    <resultMap id="unitAgencyMergeEntityMap" type="unitAgencyMergeEntity">
13
+        <result column="UNIT_ID" property="unitId"/>
14
+        <result column="DTU_NO" property="dtuNo"/>
15
+        <result column="PUSER_CODE" property="puserCode"/>
16
+        <result column="ISDELETED" property="isDeleted"/>
17
+        <result column="AGENCY_ID" property="agencyId"/>
18
+        <result column="AGENCY_PATH" property="agencyPath"/>
19
+        <result column="AGENCY_NAME" property="agencyName"/>
20
+        <result column="BUILDING_ID" property="buildingId"/>
21
+        <result column="NAME_OF_BUILDING" property="nameOfBuilding"/>
22
+        <result column="UNIT_TYPE_ID" property="unitTypeId"/>
23
+        <result column="UNIT_TYPE" property="unitType"/>
24
+    </resultMap>
25
+
26
+
27
+    <select id="findUpdateUaList" resultMap="unitAgencyMergeEntityMap">
28
+        SELECT TU.UNIT_ID,
29
+               TU.DTU_NO,
30
+               TU.PUSER_CODE,
31
+               TAG.AGENCY_ID,
32
+               TAG.AGENCY_PATH,
33
+               TAG.AGENCY_NAME,
34
+               TAG.ISDELETED,
35
+               TB.BUILDING_ID,
36
+               TB.NAME_OF_BUILDING,
37
+               TUT.UNIT_TYPE_ID,
38
+               TUT.UNIT_TYPE,
39
+               ROWNUM RN
40
+        FROM (select *
41
+              from T_AGENCY I_TAG
42
+              where UPDATESTAMP between to_date('${fromDate}', 'YYYY-MM-DD HH24:MI:SS')
43
+                        and to_date('${toDate}', 'YYYY-MM-DD HH24:MI:SS')
44
+             ) TAG
45
+                 INNER JOIN T_UNIT TU ON TU.AGENCY_ID = TAG.AGENCY_ID
46
+                 INNER JOIN T_BUILDING TB ON TB.BUILDING_ID = TU.BUILDING_ID
47
+                 INNER JOIN T_UNIT_TYPE TUT ON TUT.UNIT_TYPE_ID = TU.UNIT_TYPE_ID
48
+    </select>
49
+
50
+
51
+</mapper>

+ 15 - 0
elastic-publish-service/src/main/resources/mapper/BuildingMapper.xml 查看文件

@@ -0,0 +1,15 @@
1
+<?xml version="1.0" encoding="UTF-8" ?>
2
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
3
+<mapper namespace="com.vcarecity.elastic.publish.mapper.BuildingMapper">
4
+
5
+    <select id="findUpdateList" resultType="buildingEntity">
6
+        select BUILDING_ID, NAME_OF_BUILDING, ISDELETED
7
+        from T_BUILDING
8
+        where UPDATESTAMP between to_date('${fromDate}', 'YYYY-MM-DD HH24:MI:SS')
9
+                  and to_date('${toDate}', 'YYYY-MM-DD HH24:MI:SS')
10
+    </select>
11
+
12
+    <select id="findUpdateUaList" resultType="unitAgencyMergeEntity">
13
+
14
+    </select>
15
+</mapper>

+ 49 - 0
elastic-publish-service/src/main/resources/mapper/UnitMapper.xml 查看文件

@@ -0,0 +1,49 @@
1
+<?xml version="1.0" encoding="UTF-8" ?>
2
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
3
+<mapper namespace="com.vcarecity.elastic.publish.mapper.UnitMapper">
4
+
5
+    <select id="findUpdateList" resultType="unitEntity">
6
+        select UNIT_ID, DTU_NO, PUSER_CODE, ISDELETED
7
+        from T_UNIT
8
+        where UPDATESTAMP between to_date('${fromDate}', 'YYYY-MM-DD HH24:MI:SS')
9
+                  and to_date('${toDate}', 'YYYY-MM-DD HH24:MI:SS')
10
+    </select>
11
+
12
+    <resultMap id="unitAgencyMergeEntityMap" type="unitAgencyMergeEntity">
13
+        <result column="UNIT_ID" property="unitId"/>
14
+        <result column="DTU_NO" property="dtuNo"/>
15
+        <result column="PUSER_CODE" property="puserCode"/>
16
+        <result column="ISDELETED" property="isDeleted"/>
17
+        <result column="AGENCY_ID" property="agencyId"/>
18
+        <result column="AGENCY_PATH" property="agencyPath"/>
19
+        <result column="AGENCY_NAME" property="agencyName"/>
20
+        <result column="BUILDING_ID" property="buildingId"/>
21
+        <result column="NAME_OF_BUILDING" property="nameOfBuilding"/>
22
+        <result column="UNIT_TYPE_ID" property="unitTypeId"/>
23
+        <result column="UNIT_TYPE" property="unitType"/>
24
+    </resultMap>
25
+
26
+
27
+    <select id="findUpdateUaList" resultMap="unitAgencyMergeEntityMap">
28
+        SELECT TU.UNIT_ID,
29
+               TU.DTU_NO,
30
+               TU.PUSER_CODE,
31
+               TU.ISDELETED,
32
+               TAG.AGENCY_ID,
33
+               TAG.AGENCY_PATH,
34
+               TAG.AGENCY_NAME,
35
+               TB.BUILDING_ID,
36
+               TB.NAME_OF_BUILDING,
37
+               TUT.UNIT_TYPE_ID,
38
+               TUT.UNIT_TYPE,
39
+               ROWNUM RN
40
+        FROM (select *
41
+              from T_UNIT I_TU
42
+              where UPDATESTAMP between to_date('${fromDate}', 'YYYY-MM-DD HH24:MI:SS')
43
+                        and to_date('${toDate}', 'YYYY-MM-DD HH24:MI:SS')
44
+             ) TU
45
+                 INNER JOIN T_AGENCY TAG ON TU.AGENCY_ID = TAG.AGENCY_ID
46
+                 INNER JOIN T_BUILDING TB ON TB.BUILDING_ID = TU.BUILDING_ID
47
+                 INNER JOIN T_UNIT_TYPE TUT ON TUT.UNIT_TYPE_ID = TU.UNIT_TYPE_ID
48
+    </select>
49
+</mapper>

+ 29 - 0
elastic-publish-service/src/test/java/com/vcarecity/elastic/publish/mapper/AgencyMapperTest.java 查看文件

@@ -0,0 +1,29 @@
1
+package com.vcarecity.elastic.publish.mapper;
2
+
3
+import org.junit.jupiter.api.Test;
4
+import org.springframework.beans.factory.annotation.Autowired;
5
+import org.springframework.boot.test.context.SpringBootTest;
6
+
7
+@SpringBootTest
8
+public class AgencyMapperTest {
9
+
10
+    @Autowired
11
+    private AgencyMapper agencyMapper;
12
+
13
+    @Test
14
+    public void findUpdateList() {
15
+
16
+        String from = "2016-01-08 15:13:47";
17
+        String to = "2017-01-08 15:13:47";
18
+
19
+        agencyMapper.findUpdateList(from, to);
20
+    }
21
+
22
+    @Test
23
+    public void findUpdateUaList() {
24
+        String from = "2016-01-08 15:13:47";
25
+        String to = "2017-01-08 15:13:47";
26
+
27
+        agencyMapper.findUpdateUaList(from, to);
28
+    }
29
+}

+ 20 - 0
elastic-publish-service/src/test/java/com/vcarecity/elastic/publish/mapper/BuildingMapperTest.java 查看文件

@@ -0,0 +1,20 @@
1
+package com.vcarecity.elastic.publish.mapper;
2
+
3
+import org.junit.jupiter.api.Test;
4
+import org.springframework.beans.factory.annotation.Autowired;
5
+import org.springframework.boot.test.context.SpringBootTest;
6
+
7
+
8
+@SpringBootTest
9
+class BuildingMapperTest {
10
+
11
+    @Autowired
12
+    private BuildingMapper buildingMapper;
13
+
14
+    @Test
15
+    void findUpdateList() {
16
+        String from = "2016-01-08 15:13:47";
17
+        String to = "2017-01-08 15:13:47";
18
+        buildingMapper.findUpdateList(from, to);
19
+    }
20
+}

+ 33 - 0
elastic-publish-service/src/test/java/com/vcarecity/elastic/publish/mapper/UnitMapperTest.java 查看文件

@@ -0,0 +1,33 @@
1
+package com.vcarecity.elastic.publish.mapper;
2
+
3
+import com.vcarecity.elastic.publish.entity.UnitAgencyMergeEntity;
4
+import org.junit.jupiter.api.Test;
5
+import org.springframework.beans.factory.annotation.Autowired;
6
+import org.springframework.boot.test.context.SpringBootTest;
7
+
8
+import java.util.List;
9
+
10
+@SpringBootTest
11
+class UnitMapperTest {
12
+
13
+    @Autowired
14
+    private UnitMapper unitMapper;
15
+
16
+    @Test
17
+    void findUpdateList() {
18
+        String from = "2016-01-08 15:13:47";
19
+        String to = "2017-01-08 15:13:47";
20
+        unitMapper.findUpdateList(from, to);
21
+    }
22
+
23
+    @Test
24
+    public void findUpdateUaList() {
25
+        String from = "2018-12-23 15:00:00";
26
+        String to = "2018-12-24 15:00:00";
27
+        List<UnitAgencyMergeEntity> updateUaList = unitMapper.findUpdateUaList(from, to);
28
+
29
+        for (UnitAgencyMergeEntity unitAgencyMergeEntity : updateUaList) {
30
+            System.out.println(unitAgencyMergeEntity);
31
+        }
32
+    }
33
+}

+ 35 - 0
elastic-publish-service/src/test/java/com/vcarecity/elastic/publish/service/impl/UnitServiceImplTest.java 查看文件

@@ -0,0 +1,35 @@
1
+package com.vcarecity.elastic.publish.service.impl;
2
+
3
+import org.elasticsearch.action.update.UpdateRequest;
4
+import org.elasticsearch.client.RestHighLevelClient;
5
+import org.elasticsearch.script.Script;
6
+import org.elasticsearch.script.ScriptType;
7
+import org.junit.jupiter.api.Test;
8
+import org.springframework.beans.factory.annotation.Autowired;
9
+import org.springframework.boot.test.context.SpringBootTest;
10
+
11
+import java.util.HashMap;
12
+import java.util.Map;
13
+
14
+
15
+@SpringBootTest
16
+class UnitServiceImplTest {
17
+
18
+    @Autowired
19
+    private RestHighLevelClient restHighLevelClient;
20
+
21
+    @Test
22
+    public void getUnitAgencyByQuery() {
23
+
24
+        UpdateRequest request = new UpdateRequest();
25
+
26
+        Map<String, Object> parameters = new HashMap<>();
27
+        parameters.put("dtuNo", "1234567890AB");
28
+        // parameters.put("puserCode", "/0/1234567890AB/1/031号");
29
+
30
+        Script inline = new Script(ScriptType.INLINE, "painless",
31
+                "ctx._source.dtuNo = params.dtuNo", parameters);
32
+
33
+        request.script(inline);
34
+    }
35
+}

+ 21 - 0
elastic-publish-service/src/test/java/com/vcarecity/elastic/publish/service/impl/UpdateElasticServiceImplTest.java 查看文件

@@ -0,0 +1,21 @@
1
+package com.vcarecity.elastic.publish.service.impl;
2
+
3
+import com.vcarecity.elastic.publish.service.UpdateElasticService;
4
+import org.junit.jupiter.api.Test;
5
+import org.springframework.beans.factory.annotation.Autowired;
6
+import org.springframework.boot.test.context.SpringBootTest;
7
+
8
+
9
+@SpringBootTest
10
+public class UpdateElasticServiceImplTest {
11
+
12
+    @Autowired
13
+    private UpdateElasticService updateElasticService;
14
+
15
+    @Test
16
+    void updateTest() throws Exception {
17
+        updateElasticService.updateTest();
18
+    }
19
+
20
+
21
+}

+ 1 - 0
elastic-publish-service/src/test/lombok.config 查看文件

@@ -0,0 +1 @@
1
+lombok.log.fieldName = logger

+ 171 - 0
pom.xml 查看文件

@@ -0,0 +1,171 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <modelVersion>4.0.0</modelVersion>
6
+
7
+    <groupId>com.vcarecity.test.data</groupId>
8
+    <artifactId>elastic-data-test</artifactId>
9
+    <packaging>pom</packaging>
10
+    <version>1.0.0</version>
11
+
12
+    <modules>
13
+        <module>elastic-publish-service</module>
14
+        <module>elastic-load-data</module>
15
+        <module>common</module>
16
+    </modules>
17
+
18
+
19
+    <repositories>
20
+        <repository>
21
+            <id>elastic.co</id>
22
+            <url>https://artifacts.elastic.co/maven</url>
23
+        </repository>
24
+    </repositories>
25
+
26
+
27
+    <dependencyManagement>
28
+        <dependencies>
29
+
30
+            <dependency>
31
+                <groupId>com.vcarecity.test.data</groupId>
32
+                <artifactId>common</artifactId>
33
+                <version>${project.version}</version>
34
+            </dependency>
35
+
36
+            <dependency>
37
+                <groupId>org.slf4j</groupId>
38
+                <artifactId>slf4j-api</artifactId>
39
+                <version>1.7.29</version>
40
+            </dependency>
41
+            <dependency>
42
+                <groupId>org.slf4j</groupId>
43
+                <artifactId>log4j-over-slf4j</artifactId>
44
+                <version>1.7.29</version>
45
+            </dependency>
46
+            <dependency>
47
+                <groupId>org.apache.logging.log4j</groupId>
48
+                <artifactId>log4j-to-slf4j</artifactId>
49
+                <version>2.12.1</version>
50
+            </dependency>
51
+
52
+            <dependency>
53
+                <groupId>ch.qos.logback</groupId>
54
+                <artifactId>logback-classic</artifactId>
55
+                <version>1.2.3</version>
56
+            </dependency>
57
+            <dependency>
58
+                <groupId>org.projectlombok</groupId>
59
+                <artifactId>lombok</artifactId>
60
+                <version>1.18.10</version>
61
+                <scope>provided</scope>
62
+            </dependency>
63
+
64
+            <!-- https://mvnrepository.com/artifact/junit/junit -->
65
+            <dependency>
66
+                <groupId>junit</groupId>
67
+                <artifactId>junit</artifactId>
68
+                <version>4.12</version>
69
+                <scope>test</scope>
70
+            </dependency>
71
+
72
+            <dependency>
73
+                <groupId>com.google.inject</groupId>
74
+                <artifactId>guice</artifactId>
75
+                <version>4.2.2</version>
76
+            </dependency>
77
+            <dependency>
78
+                <groupId>com.google.inject.extensions</groupId>
79
+                <artifactId>guice-assistedinject</artifactId>
80
+                <version>4.2.2</version>
81
+            </dependency>
82
+            <dependency>
83
+                <groupId>me.yuxiaoyao.lang</groupId>
84
+                <artifactId>configuration-loader</artifactId>
85
+                <version>2.0.0</version>
86
+            </dependency>
87
+            <dependency>
88
+                <groupId>com.fasterxml.jackson.core</groupId>
89
+                <artifactId>jackson-databind</artifactId>
90
+                <version>2.10.1</version>
91
+            </dependency>
92
+            <dependency>
93
+                <groupId>com.fasterxml.jackson.dataformat</groupId>
94
+                <artifactId>jackson-dataformat-yaml</artifactId>
95
+                <version>2.10.1</version>
96
+            </dependency>
97
+
98
+
99
+            <dependency>
100
+                <groupId>com.google.guava</groupId>
101
+                <artifactId>guava</artifactId>
102
+                <version>28.1-jre</version>
103
+            </dependency>
104
+            <dependency>
105
+                <groupId>oracle.jdbc</groupId>
106
+                <artifactId>ojdbc8</artifactId>
107
+                <version>12.2.0.1.0</version>
108
+            </dependency>
109
+
110
+            <dependency>
111
+                <groupId>com.zaxxer</groupId>
112
+                <artifactId>HikariCP</artifactId>
113
+                <version>3.4.1</version>
114
+            </dependency>
115
+            <dependency>
116
+                <groupId>javax.persistence</groupId>
117
+                <artifactId>persistence-api</artifactId>
118
+                <version>1.0.2</version>
119
+            </dependency>
120
+
121
+            <dependency>
122
+                <groupId>cglib</groupId>
123
+                <artifactId>cglib</artifactId>
124
+                <version>3.3.0</version>
125
+            </dependency>
126
+
127
+            <dependency>
128
+                <groupId>org.elasticsearch.client</groupId>
129
+                <artifactId>elasticsearch-rest-high-level-client</artifactId>
130
+                <version>${elasticsearch.version}</version>
131
+            </dependency>
132
+            <dependency>
133
+                <groupId>org.elasticsearch.client</groupId>
134
+                <artifactId>elasticsearch-rest-client</artifactId>
135
+                <version>${elasticsearch.version}</version>
136
+            </dependency>
137
+            <dependency>
138
+                <groupId>org.elasticsearch</groupId>
139
+                <artifactId>elasticsearch</artifactId>
140
+                <version>${elasticsearch.version}</version>
141
+            </dependency>
142
+
143
+            <dependency>
144
+                <!-- Import dependency management from Spring Boot -->
145
+                <groupId>org.springframework.boot</groupId>
146
+                <artifactId>spring-boot-dependencies</artifactId>
147
+                <version>2.2.2.RELEASE</version>
148
+                <type>pom</type>
149
+                <scope>import</scope>
150
+            </dependency>
151
+
152
+        </dependencies>
153
+    </dependencyManagement>
154
+    <properties>
155
+        <elasticsearch.version>7.5.0</elasticsearch.version>
156
+    </properties>
157
+
158
+    <build>
159
+        <plugins>
160
+            <plugin>
161
+                <groupId>org.apache.maven.plugins</groupId>
162
+                <artifactId>maven-compiler-plugin</artifactId>
163
+                <configuration>
164
+                    <source>8</source>
165
+                    <target>8</target>
166
+                </configuration>
167
+            </plugin>
168
+        </plugins>
169
+    </build>
170
+
171
+</project>