Commit ea286ff4ddda8cd8560d83769041bac3a19b1ad7

Authored by 王通
1 parent 6acfb9ca

1.加入自动生成报站文件

1 -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
2 - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
3 -  
4 - <modelVersion>4.0.0</modelVersion>  
5 - <groupId>com.bsth</groupId>  
6 - <artifactId>bsth_control</artifactId>  
7 - <version>0.0.1-SNAPSHOT</version>  
8 - <packaging>war</packaging>  
9 -  
10 - <parent>  
11 - <groupId>org.springframework.boot</groupId>  
12 - <artifactId>spring-boot-starter-parent</artifactId>  
13 - <version>2.1.6.RELEASE</version>  
14 - </parent>  
15 -  
16 - <dependencies>  
17 - <dependency>  
18 - <groupId>org.springframework.boot</groupId>  
19 - <artifactId>spring-boot-starter-web</artifactId>  
20 - </dependency>  
21 -  
22 - <dependency>  
23 - <groupId>org.springframework.boot</groupId>  
24 - <artifactId>spring-boot-starter-tomcat</artifactId>  
25 - <scope>provided</scope>  
26 - </dependency>  
27 - <dependency>  
28 - <groupId>javax.servlet</groupId>  
29 - <artifactId>javax.servlet-api</artifactId>  
30 - <version>3.1.0</version>  
31 - <scope>provided</scope>  
32 - </dependency>  
33 - <dependency>  
34 - <groupId>org.springframework.boot</groupId>  
35 - <artifactId>spring-boot-starter-security</artifactId>  
36 - </dependency>  
37 - <dependency>  
38 - <groupId>org.springframework.boot</groupId>  
39 - <artifactId>spring-boot-starter-data-jpa</artifactId>  
40 - </dependency>  
41 - <dependency>  
42 - <groupId>org.springframework.boot</groupId>  
43 - <artifactId>spring-boot-starter-aop</artifactId>  
44 - </dependency>  
45 -  
46 - <dependency>  
47 - <groupId>org.springframework</groupId>  
48 - <artifactId>spring-context-support</artifactId>  
49 - </dependency>  
50 - <dependency>  
51 - <groupId>org.springframework.boot</groupId>  
52 - <artifactId>spring-boot-starter-websocket</artifactId>  
53 - </dependency>  
54 - <dependency>  
55 - <groupId>org.springframework.boot</groupId>  
56 - <artifactId>spring-boot-configuration-processor</artifactId>  
57 - <optional>true</optional>  
58 - </dependency>  
59 - <dependency>  
60 - <groupId>org.springframework.kafka</groupId>  
61 - <artifactId>spring-kafka</artifactId>  
62 - </dependency>  
63 - <dependency>  
64 - <groupId>mysql</groupId>  
65 - <artifactId>mysql-connector-java</artifactId>  
66 - <version>5.1.38</version>  
67 - </dependency>  
68 -  
69 - <dependency>  
70 - <groupId>joda-time</groupId>  
71 - <artifactId>joda-time</artifactId>  
72 - </dependency>  
73 - <dependency>  
74 - <groupId>com.alibaba</groupId>  
75 - <artifactId>fastjson</artifactId>  
76 - <version>1.2.4</version>  
77 - </dependency>  
78 -  
79 - <dependency>  
80 - <groupId>org.apache.httpcomponents</groupId>  
81 - <artifactId>httpclient</artifactId>  
82 - </dependency>  
83 -  
84 - <!-- dbcp2数据库连接池 -->  
85 - <dependency>  
86 - <groupId>org.apache.commons</groupId>  
87 - <artifactId>commons-dbcp2</artifactId>  
88 - </dependency>  
89 -  
90 - <dependency>  
91 - <groupId>org.hibernate</groupId>  
92 - <artifactId>hibernate-search-orm</artifactId>  
93 - <version>5.11.2.Final</version>  
94 - </dependency>  
95 -  
96 - <dependency>  
97 - <groupId>commons-lang</groupId>  
98 - <artifactId>commons-lang</artifactId>  
99 - <version>2.6</version>  
100 - </dependency>  
101 - <dependency>  
102 - <groupId>org.apache.commons</groupId>  
103 - <artifactId>commons-lang3</artifactId>  
104 - <version>3.4</version>  
105 - </dependency>  
106 - <dependency>  
107 - <groupId>commons-fileupload</groupId>  
108 - <artifactId>commons-fileupload</artifactId>  
109 - <version>1.2.2</version>  
110 - </dependency>  
111 - <dependency>  
112 - <groupId>commons-io</groupId>  
113 - <artifactId>commons-io</artifactId>  
114 - <version>2.4</version>  
115 - </dependency>  
116 - <dependency>  
117 - <groupId>org.codehaus.janino</groupId>  
118 - <artifactId>janino</artifactId>  
119 - </dependency>  
120 -  
121 - <dependency>  
122 - <groupId>org.apache.poi</groupId>  
123 - <artifactId>poi-ooxml</artifactId>  
124 - <version>3.13</version>  
125 - </dependency>  
126 -  
127 - <dependency>  
128 - <groupId>com.google.guava</groupId>  
129 - <artifactId>guava</artifactId>  
130 - <version>19.0</version>  
131 - </dependency>  
132 - <!-- ftp文件上传包 -->  
133 - <dependency>  
134 - <groupId>commons-net</groupId>  
135 - <artifactId>commons-net</artifactId>  
136 - <version>3.5</version>  
137 - </dependency>  
138 - <dependency>  
139 - <groupId>org.apache.commons</groupId>  
140 - <artifactId>commons-compress</artifactId>  
141 - <version>1.3</version>  
142 - </dependency>  
143 - <!-- drools 6依赖 -->  
144 - <dependency>  
145 - <groupId>org.kie</groupId>  
146 - <artifactId>kie-api</artifactId>  
147 - </dependency>  
148 - <dependency>  
149 - <groupId>org.drools</groupId>  
150 - <artifactId>drools-compiler</artifactId>  
151 - </dependency>  
152 -  
153 - <!-- springboot测试 -->  
154 - <dependency>  
155 - <groupId>org.springframework.boot</groupId>  
156 - <artifactId>spring-boot-starter-test</artifactId>  
157 - <scope>test</scope>  
158 - </dependency>  
159 -  
160 - <dependency>  
161 - <groupId>c3p0</groupId>  
162 - <artifactId>c3p0</artifactId>  
163 - <version>0.9.1.2</version>  
164 - </dependency>  
165 -  
166 - <!-- 图表 -->  
167 - <dependency>  
168 - <groupId>com.google.code.gson</groupId>  
169 - <artifactId>gson</artifactId>  
170 - <version>2.8.5</version>  
171 - </dependency>  
172 - <dependency>  
173 - <groupId>com.github.abel533</groupId>  
174 - <artifactId>ECharts</artifactId>  
175 - <version>2.1.8</version>  
176 - </dependency>  
177 -  
178 - <dependency>  
179 - <groupId>org.apache.tika</groupId>  
180 - <artifactId>tika-core</artifactId>  
181 - <version>1.7</version>  
182 - </dependency>  
183 -  
184 - <!-- pentaho kettle 依赖 -->  
185 - <dependency>  
186 - <groupId>pentaho-kettle</groupId>  
187 - <artifactId>kettle-core</artifactId>  
188 - <version>6.0.1.0-386</version>  
189 - <exclusions>  
190 - <exclusion>  
191 - <groupId>org.apache.xmlgraphics</groupId>  
192 - <artifactId>batik-js</artifactId>  
193 - </exclusion>  
194 - </exclusions>  
195 - </dependency>  
196 - <dependency>  
197 - <groupId>pentaho-kettle</groupId>  
198 - <artifactId>kettle-engine</artifactId>  
199 - <version>6.0.1.0-386</version>  
200 - </dependency>  
201 - <dependency>  
202 - <groupId>pentaho</groupId>  
203 - <artifactId>metastore</artifactId>  
204 - <version>6.0.1.0-386</version>  
205 - </dependency>  
206 - <dependency>  
207 - <groupId>org.apache.commons</groupId>  
208 - <artifactId>commons-vfs2</artifactId>  
209 - <version>2.1-20150824</version>  
210 - </dependency>  
211 -  
212 - <dependency>  
213 - <groupId>net.sourceforge.jexcelapi</groupId>  
214 - <artifactId>jxl</artifactId>  
215 - <version>2.6.12</version>  
216 - <exclusions>  
217 - <exclusion>  
218 - <groupId>log4j</groupId>  
219 - <artifactId>log4j</artifactId>  
220 - </exclusion>  
221 - </exclusions>  
222 - </dependency>  
223 - <dependency>  
224 - <groupId>rhino</groupId>  
225 - <artifactId>js</artifactId>  
226 - <version>1.7R2</version>  
227 - </dependency>  
228 - <dependency>  
229 - <groupId>javax.mail</groupId>  
230 - <artifactId>mail</artifactId>  
231 - <version>1.4.7</version>  
232 - </dependency>  
233 -  
234 - <dependency>  
235 - <groupId>com.github.axet</groupId>  
236 - <artifactId>kaptcha</artifactId>  
237 - <version>0.0.9</version>  
238 - </dependency>  
239 -  
240 - <dependency>  
241 - <groupId>commons-codec</groupId>  
242 - <artifactId>commons-codec</artifactId>  
243 - <version>1.4</version>  
244 - <scope>compile</scope>  
245 - </dependency>  
246 - <dependency>  
247 - <groupId>org.bouncycastle</groupId>  
248 - <artifactId>bcprov-jdk15on</artifactId>  
249 - <version>1.52</version>  
250 - </dependency>  
251 - <dependency>  
252 - <groupId>axis</groupId>  
253 - <artifactId>axis</artifactId>  
254 - <version>1.4</version>  
255 - </dependency>  
256 - <dependency>  
257 - <groupId>javax.xml</groupId>  
258 - <artifactId>jaxrpc-api</artifactId>  
259 - <version>1.1</version>  
260 - </dependency>  
261 -  
262 - <dependency>  
263 - <groupId>org.apache.axis2</groupId>  
264 - <artifactId>axis2-adb</artifactId>  
265 - <version>1.7.4</version>  
266 - </dependency>  
267 - <dependency>  
268 - <groupId>org.apache.axis2</groupId>  
269 - <artifactId>axis2-transport-local</artifactId>  
270 - <version>1.7.4</version>  
271 - </dependency>  
272 - <dependency>  
273 - <groupId>org.apache.axis2</groupId>  
274 - <artifactId>axis2-transport-http</artifactId>  
275 - <version>1.7.4</version>  
276 - </dependency>  
277 -  
278 - <dependency>  
279 - <groupId>org.dbunit</groupId>  
280 - <artifactId>dbunit</artifactId>  
281 - <version>2.4.9</version>  
282 - <scope>test</scope>  
283 -  
284 - <exclusions>  
285 - <exclusion>  
286 - <groupId>org.slf4j</groupId>  
287 - <artifactId>slf4j-api</artifactId>  
288 - </exclusion>  
289 - </exclusions>  
290 - </dependency>  
291 -  
292 - <dependency>  
293 - <groupId>com.h2database</groupId>  
294 - <artifactId>h2</artifactId>  
295 - <version>1.2.132</version>  
296 - <scope>test</scope>  
297 - </dependency>  
298 -  
299 -  
300 - <dependency>  
301 - <groupId>org.apache.mina</groupId>  
302 - <artifactId>mina-core</artifactId>  
303 - <version>2.0.13</version>  
304 - </dependency>  
305 -  
306 - <dependency>  
307 - <groupId>com.google.protobuf</groupId>  
308 - <artifactId>protobuf-java</artifactId>  
309 - <version>3.3.0</version>  
310 - </dependency>  
311 -  
312 - <dependency>  
313 - <groupId>com.github.stuxuhai</groupId>  
314 - <artifactId>jpinyin</artifactId>  
315 - <version>1.1.8</version>  
316 - </dependency>  
317 -  
318 - <!-- dubbo 需要的jar start -->  
319 - <dependency>  
320 - <groupId>com.alibaba</groupId>  
321 - <artifactId>dubbo</artifactId>  
322 - <!--<version>2.6.3</version>-->  
323 - <version>2.5.3</version>  
324 - <exclusions>  
325 - <exclusion>  
326 - <groupId>org.springframework</groupId>  
327 - <artifactId>spring</artifactId>  
328 - </exclusion>  
329 - <exclusion>  
330 - <groupId>log4j</groupId>  
331 - <artifactId>log4j</artifactId>  
332 - </exclusion>  
333 - </exclusions>  
334 - </dependency>  
335 -  
336 - <dependency>  
337 - <groupId>org.apache.zookeeper</groupId>  
338 - <artifactId>zookeeper</artifactId>  
339 - <version>3.4.5</version>  
340 - <exclusions>  
341 - <exclusion>  
342 - <groupId>log4j</groupId>  
343 - <artifactId>log4j</artifactId>  
344 - </exclusion>  
345 - <exclusion>  
346 - <groupId>org.slf4j</groupId>  
347 - <artifactId>slf4j-log4j12</artifactId>  
348 - </exclusion>  
349 - </exclusions>  
350 - </dependency>  
351 -  
352 - <dependency>  
353 - <groupId>com.101tec</groupId>  
354 - <artifactId>zkclient</artifactId>  
355 - <version>0.3</version>  
356 - <exclusions>  
357 - <exclusion>  
358 - <groupId>log4j</groupId>  
359 - <artifactId>log4j</artifactId>  
360 - </exclusion>  
361 - </exclusions>  
362 - </dependency>  
363 -  
364 - <!-- plan common工程依赖 -->  
365 - <dependency>  
366 - <groupId>com.bsth.control_v2</groupId>  
367 - <artifactId>plan_module-common</artifactId>  
368 - <version>1.0-SNAPSHOT</version>  
369 - </dependency>  
370 - <!-- plan common config 工程依赖 -->  
371 - <dependency>  
372 - <groupId>com.bsth.control_v2</groupId>  
373 - <artifactId>plan_module-common-config</artifactId>  
374 - <version>1.0-SNAPSHOT</version>  
375 - </dependency>  
376 - <dependency>  
377 - <groupId>org.slf4j</groupId>  
378 - <artifactId>slf4j-api</artifactId>  
379 - <version>1.7.7</version>  
380 - </dependency>  
381 - <dependency>  
382 - <groupId>ch.qos.logback</groupId>  
383 - <artifactId>logback-classic</artifactId>  
384 - <version>1.1.11</version>  
385 - </dependency>  
386 - <dependency>  
387 - <groupId>org.slf4j</groupId>  
388 - <artifactId>log4j-over-slf4j</artifactId>  
389 - <version>1.7.7</version>  
390 - </dependency>  
391 -  
392 - <dependency>  
393 - <groupId>org.projectlombok</groupId>  
394 - <artifactId>lombok</artifactId>  
395 - </dependency>  
396 -  
397 - <!-- https://mvnrepository.com/artifact/pentaho/simple-jndi -->  
398 - <dependency>  
399 - <groupId>pentaho</groupId>  
400 - <artifactId>simple-jndi</artifactId>  
401 - <version>1.0.0</version>  
402 - </dependency>  
403 -  
404 - <!-- geotool -->  
405 - <dependency>  
406 - <groupId>org.locationtech.jts</groupId>  
407 - <artifactId>jts-core</artifactId>  
408 - <version>1.16.1</version>  
409 - </dependency>  
410 -  
411 - <dependency>  
412 - <groupId>org.hibernate</groupId>  
413 - <artifactId>hibernate-spatial</artifactId>  
414 - </dependency>  
415 - </dependencies>  
416 -  
417 - <dependencyManagement>  
418 - <dependencies>  
419 - <!-- drools 6依赖 -->  
420 - <dependency>  
421 - <groupId>org.drools</groupId>  
422 - <artifactId>drools-bom</artifactId>  
423 - <type>pom</type>  
424 - <version>6.3.0.Final</version>  
425 - <scope>import</scope>  
426 - </dependency>  
427 - </dependencies>  
428 - </dependencyManagement>  
429 -  
430 - <build>  
431 - <plugins>  
432 - <plugin>  
433 - <artifactId>maven-compiler-plugin</artifactId>  
434 - <configuration>  
435 - <source>1.8</source>  
436 - <target>1.8</target>  
437 - </configuration>  
438 - </plugin>  
439 - <plugin>  
440 - <artifactId>maven-war-plugin</artifactId>  
441 - <configuration>  
442 - <failOnMissingWebXml>false</failOnMissingWebXml>  
443 - </configuration>  
444 - </plugin>  
445 - <plugin>  
446 - <groupId>org.springframework.boot</groupId>  
447 - <artifactId>spring-boot-maven-plugin</artifactId>  
448 - </plugin>  
449 - </plugins>  
450 - <resources>  
451 - <resource>  
452 - <directory>src/main/resources</directory>  
453 - <filtering>false</filtering>  
454 - </resource>  
455 - </resources>  
456 - </build>  
457 - <repositories>  
458 - <repository>  
459 - <id>spring-snapshots</id>  
460 - <url>http://repo.spring.io/snapshot</url>  
461 - <snapshots>  
462 - <enabled>true</enabled>  
463 - </snapshots>  
464 - </repository>  
465 - <repository>  
466 - <id>spring-milestones</id>  
467 - <url>http://repo.spring.io/milestone</url>  
468 - </repository>  
469 - <repository>  
470 - <id>pentaho-public</id>  
471 - <url>https://repo.orl.eng.hitachivantara.com/artifactory/pnt-mvn/</url>  
472 - </repository>  
473 - </repositories>  
474 - <pluginRepositories>  
475 - <pluginRepository>  
476 - <id>spring-snapshots</id>  
477 - <url>http://repo.spring.io/snapshot</url>  
478 - </pluginRepository>  
479 - <pluginRepository>  
480 - <id>spring-milestones</id>  
481 - <url>http://repo.spring.io/milestone</url>  
482 - </pluginRepository>  
483 - </pluginRepositories>  
484 -  
485 - <properties>  
486 - <start-class>com.bsth.Application</start-class>  
487 - </properties>  
488 -</project> 1 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3 +
  4 + <modelVersion>4.0.0</modelVersion>
  5 + <groupId>com.bsth</groupId>
  6 + <artifactId>bsth_control</artifactId>
  7 + <version>0.0.1-SNAPSHOT</version>
  8 + <packaging>war</packaging>
  9 +
  10 + <parent>
  11 + <groupId>org.springframework.boot</groupId>
  12 + <artifactId>spring-boot-starter-parent</artifactId>
  13 + <version>2.1.6.RELEASE</version>
  14 + </parent>
  15 +
  16 + <dependencies>
  17 + <dependency>
  18 + <groupId>org.springframework.boot</groupId>
  19 + <artifactId>spring-boot-starter-web</artifactId>
  20 + </dependency>
  21 +
  22 + <dependency>
  23 + <groupId>org.springframework.boot</groupId>
  24 + <artifactId>spring-boot-starter-tomcat</artifactId>
  25 + <scope>provided</scope>
  26 + </dependency>
  27 + <dependency>
  28 + <groupId>javax.servlet</groupId>
  29 + <artifactId>javax.servlet-api</artifactId>
  30 + <version>3.1.0</version>
  31 + <scope>provided</scope>
  32 + </dependency>
  33 + <dependency>
  34 + <groupId>org.springframework.boot</groupId>
  35 + <artifactId>spring-boot-starter-security</artifactId>
  36 + </dependency>
  37 + <dependency>
  38 + <groupId>org.springframework.boot</groupId>
  39 + <artifactId>spring-boot-starter-data-jpa</artifactId>
  40 + </dependency>
  41 + <dependency>
  42 + <groupId>org.springframework.boot</groupId>
  43 + <artifactId>spring-boot-starter-aop</artifactId>
  44 + </dependency>
  45 +
  46 + <dependency>
  47 + <groupId>org.springframework</groupId>
  48 + <artifactId>spring-context-support</artifactId>
  49 + </dependency>
  50 + <dependency>
  51 + <groupId>org.springframework.boot</groupId>
  52 + <artifactId>spring-boot-starter-websocket</artifactId>
  53 + </dependency>
  54 + <dependency>
  55 + <groupId>org.springframework.boot</groupId>
  56 + <artifactId>spring-boot-configuration-processor</artifactId>
  57 + <optional>true</optional>
  58 + </dependency>
  59 + <dependency>
  60 + <groupId>org.springframework.kafka</groupId>
  61 + <artifactId>spring-kafka</artifactId>
  62 + </dependency>
  63 + <dependency>
  64 + <groupId>mysql</groupId>
  65 + <artifactId>mysql-connector-java</artifactId>
  66 + <version>5.1.38</version>
  67 + </dependency>
  68 +
  69 + <dependency>
  70 + <groupId>joda-time</groupId>
  71 + <artifactId>joda-time</artifactId>
  72 + </dependency>
  73 + <dependency>
  74 + <groupId>com.alibaba</groupId>
  75 + <artifactId>fastjson</artifactId>
  76 + <version>1.2.4</version>
  77 + </dependency>
  78 +
  79 + <dependency>
  80 + <groupId>org.apache.httpcomponents</groupId>
  81 + <artifactId>httpclient</artifactId>
  82 + </dependency>
  83 +
  84 + <!-- dbcp2数据库连接池 -->
  85 + <dependency>
  86 + <groupId>org.apache.commons</groupId>
  87 + <artifactId>commons-dbcp2</artifactId>
  88 + </dependency>
  89 +
  90 + <dependency>
  91 + <groupId>org.hibernate</groupId>
  92 + <artifactId>hibernate-search-orm</artifactId>
  93 + <version>5.11.2.Final</version>
  94 + </dependency>
  95 +
  96 + <dependency>
  97 + <groupId>commons-lang</groupId>
  98 + <artifactId>commons-lang</artifactId>
  99 + <version>2.6</version>
  100 + </dependency>
  101 + <dependency>
  102 + <groupId>org.apache.commons</groupId>
  103 + <artifactId>commons-lang3</artifactId>
  104 + <version>3.4</version>
  105 + </dependency>
  106 + <dependency>
  107 + <groupId>commons-fileupload</groupId>
  108 + <artifactId>commons-fileupload</artifactId>
  109 + <version>1.2.2</version>
  110 + </dependency>
  111 + <dependency>
  112 + <groupId>commons-io</groupId>
  113 + <artifactId>commons-io</artifactId>
  114 + <version>2.4</version>
  115 + </dependency>
  116 + <dependency>
  117 + <groupId>org.codehaus.janino</groupId>
  118 + <artifactId>janino</artifactId>
  119 + </dependency>
  120 +
  121 + <dependency>
  122 + <groupId>org.apache.poi</groupId>
  123 + <artifactId>poi-ooxml</artifactId>
  124 + <version>3.13</version>
  125 + </dependency>
  126 +
  127 + <dependency>
  128 + <groupId>com.google.guava</groupId>
  129 + <artifactId>guava</artifactId>
  130 + <version>19.0</version>
  131 + </dependency>
  132 + <!-- ftp文件上传包 -->
  133 + <dependency>
  134 + <groupId>commons-net</groupId>
  135 + <artifactId>commons-net</artifactId>
  136 + <version>3.5</version>
  137 + </dependency>
  138 + <dependency>
  139 + <groupId>org.apache.commons</groupId>
  140 + <artifactId>commons-compress</artifactId>
  141 + <version>1.3</version>
  142 + </dependency>
  143 + <!-- drools 6依赖 -->
  144 + <dependency>
  145 + <groupId>org.kie</groupId>
  146 + <artifactId>kie-api</artifactId>
  147 + </dependency>
  148 + <dependency>
  149 + <groupId>org.drools</groupId>
  150 + <artifactId>drools-compiler</artifactId>
  151 + </dependency>
  152 +
  153 + <!-- springboot测试 -->
  154 + <dependency>
  155 + <groupId>org.springframework.boot</groupId>
  156 + <artifactId>spring-boot-starter-test</artifactId>
  157 + <scope>test</scope>
  158 + </dependency>
  159 +
  160 + <dependency>
  161 + <groupId>c3p0</groupId>
  162 + <artifactId>c3p0</artifactId>
  163 + <version>0.9.1.2</version>
  164 + </dependency>
  165 +
  166 + <!-- 图表 -->
  167 + <dependency>
  168 + <groupId>com.google.code.gson</groupId>
  169 + <artifactId>gson</artifactId>
  170 + <version>2.8.5</version>
  171 + </dependency>
  172 + <dependency>
  173 + <groupId>com.github.abel533</groupId>
  174 + <artifactId>ECharts</artifactId>
  175 + <version>2.1.8</version>
  176 + </dependency>
  177 +
  178 + <dependency>
  179 + <groupId>org.apache.tika</groupId>
  180 + <artifactId>tika-core</artifactId>
  181 + <version>1.7</version>
  182 + </dependency>
  183 +
  184 + <!-- pentaho kettle 依赖 -->
  185 + <dependency>
  186 + <groupId>pentaho-kettle</groupId>
  187 + <artifactId>kettle-core</artifactId>
  188 + <version>6.0.1.0-386</version>
  189 + <exclusions>
  190 + <exclusion>
  191 + <groupId>org.apache.xmlgraphics</groupId>
  192 + <artifactId>batik-js</artifactId>
  193 + </exclusion>
  194 + </exclusions>
  195 + </dependency>
  196 + <dependency>
  197 + <groupId>pentaho-kettle</groupId>
  198 + <artifactId>kettle-engine</artifactId>
  199 + <version>6.0.1.0-386</version>
  200 + </dependency>
  201 + <dependency>
  202 + <groupId>pentaho</groupId>
  203 + <artifactId>metastore</artifactId>
  204 + <version>6.0.1.0-386</version>
  205 + </dependency>
  206 + <dependency>
  207 + <groupId>org.apache.commons</groupId>
  208 + <artifactId>commons-vfs2</artifactId>
  209 + <version>2.1-20150824</version>
  210 + </dependency>
  211 +
  212 + <dependency>
  213 + <groupId>net.sourceforge.jexcelapi</groupId>
  214 + <artifactId>jxl</artifactId>
  215 + <version>2.6.12</version>
  216 + <exclusions>
  217 + <exclusion>
  218 + <groupId>log4j</groupId>
  219 + <artifactId>log4j</artifactId>
  220 + </exclusion>
  221 + </exclusions>
  222 + </dependency>
  223 + <dependency>
  224 + <groupId>rhino</groupId>
  225 + <artifactId>js</artifactId>
  226 + <version>1.7R2</version>
  227 + </dependency>
  228 + <dependency>
  229 + <groupId>javax.mail</groupId>
  230 + <artifactId>mail</artifactId>
  231 + <version>1.4.7</version>
  232 + </dependency>
  233 +
  234 + <dependency>
  235 + <groupId>com.github.axet</groupId>
  236 + <artifactId>kaptcha</artifactId>
  237 + <version>0.0.9</version>
  238 + </dependency>
  239 +
  240 + <dependency>
  241 + <groupId>commons-codec</groupId>
  242 + <artifactId>commons-codec</artifactId>
  243 + <version>1.4</version>
  244 + <scope>compile</scope>
  245 + </dependency>
  246 + <dependency>
  247 + <groupId>org.bouncycastle</groupId>
  248 + <artifactId>bcprov-jdk15on</artifactId>
  249 + <version>1.52</version>
  250 + </dependency>
  251 + <dependency>
  252 + <groupId>axis</groupId>
  253 + <artifactId>axis</artifactId>
  254 + <version>1.4</version>
  255 + </dependency>
  256 + <dependency>
  257 + <groupId>javax.xml</groupId>
  258 + <artifactId>jaxrpc-api</artifactId>
  259 + <version>1.1</version>
  260 + </dependency>
  261 +
  262 + <dependency>
  263 + <groupId>org.apache.axis2</groupId>
  264 + <artifactId>axis2-adb</artifactId>
  265 + <version>1.7.4</version>
  266 + </dependency>
  267 + <dependency>
  268 + <groupId>org.apache.axis2</groupId>
  269 + <artifactId>axis2-transport-local</artifactId>
  270 + <version>1.7.4</version>
  271 + </dependency>
  272 + <dependency>
  273 + <groupId>org.apache.axis2</groupId>
  274 + <artifactId>axis2-transport-http</artifactId>
  275 + <version>1.7.4</version>
  276 + </dependency>
  277 +
  278 + <dependency>
  279 + <groupId>org.dbunit</groupId>
  280 + <artifactId>dbunit</artifactId>
  281 + <version>2.4.9</version>
  282 + <scope>test</scope>
  283 +
  284 + <exclusions>
  285 + <exclusion>
  286 + <groupId>org.slf4j</groupId>
  287 + <artifactId>slf4j-api</artifactId>
  288 + </exclusion>
  289 + </exclusions>
  290 + </dependency>
  291 +
  292 + <dependency>
  293 + <groupId>com.h2database</groupId>
  294 + <artifactId>h2</artifactId>
  295 + <version>1.2.132</version>
  296 + <scope>test</scope>
  297 + </dependency>
  298 +
  299 +
  300 + <dependency>
  301 + <groupId>org.apache.mina</groupId>
  302 + <artifactId>mina-core</artifactId>
  303 + <version>2.0.13</version>
  304 + </dependency>
  305 +
  306 + <dependency>
  307 + <groupId>com.google.protobuf</groupId>
  308 + <artifactId>protobuf-java</artifactId>
  309 + <version>3.3.0</version>
  310 + </dependency>
  311 +
  312 + <dependency>
  313 + <groupId>com.github.stuxuhai</groupId>
  314 + <artifactId>jpinyin</artifactId>
  315 + <version>1.1.8</version>
  316 + </dependency>
  317 +
  318 + <!-- dubbo 需要的jar start -->
  319 + <dependency>
  320 + <groupId>com.alibaba</groupId>
  321 + <artifactId>dubbo</artifactId>
  322 + <!--<version>2.6.3</version>-->
  323 + <version>2.5.3</version>
  324 + <exclusions>
  325 + <exclusion>
  326 + <groupId>org.springframework</groupId>
  327 + <artifactId>spring</artifactId>
  328 + </exclusion>
  329 + <exclusion>
  330 + <groupId>log4j</groupId>
  331 + <artifactId>log4j</artifactId>
  332 + </exclusion>
  333 + </exclusions>
  334 + </dependency>
  335 +
  336 + <dependency>
  337 + <groupId>org.apache.zookeeper</groupId>
  338 + <artifactId>zookeeper</artifactId>
  339 + <version>3.4.5</version>
  340 + <exclusions>
  341 + <exclusion>
  342 + <groupId>log4j</groupId>
  343 + <artifactId>log4j</artifactId>
  344 + </exclusion>
  345 + <exclusion>
  346 + <groupId>org.slf4j</groupId>
  347 + <artifactId>slf4j-log4j12</artifactId>
  348 + </exclusion>
  349 + </exclusions>
  350 + </dependency>
  351 +
  352 + <dependency>
  353 + <groupId>com.101tec</groupId>
  354 + <artifactId>zkclient</artifactId>
  355 + <version>0.3</version>
  356 + <exclusions>
  357 + <exclusion>
  358 + <groupId>log4j</groupId>
  359 + <artifactId>log4j</artifactId>
  360 + </exclusion>
  361 + </exclusions>
  362 + </dependency>
  363 +
  364 + <!-- plan common工程依赖 -->
  365 + <dependency>
  366 + <groupId>com.bsth.control_v2</groupId>
  367 + <artifactId>plan_module-common</artifactId>
  368 + <version>1.0-SNAPSHOT</version>
  369 + </dependency>
  370 + <!-- plan common config 工程依赖 -->
  371 + <dependency>
  372 + <groupId>com.bsth.control_v2</groupId>
  373 + <artifactId>plan_module-common-config</artifactId>
  374 + <version>1.0-SNAPSHOT</version>
  375 + </dependency>
  376 + <dependency>
  377 + <groupId>org.slf4j</groupId>
  378 + <artifactId>slf4j-api</artifactId>
  379 + <version>1.7.7</version>
  380 + </dependency>
  381 + <dependency>
  382 + <groupId>ch.qos.logback</groupId>
  383 + <artifactId>logback-classic</artifactId>
  384 + <version>1.1.11</version>
  385 + </dependency>
  386 + <dependency>
  387 + <groupId>org.slf4j</groupId>
  388 + <artifactId>log4j-over-slf4j</artifactId>
  389 + <version>1.7.7</version>
  390 + </dependency>
  391 +
  392 + <dependency>
  393 + <groupId>org.projectlombok</groupId>
  394 + <artifactId>lombok</artifactId>
  395 + </dependency>
  396 +
  397 + <!-- https://mvnrepository.com/artifact/pentaho/simple-jndi -->
  398 + <dependency>
  399 + <groupId>pentaho</groupId>
  400 + <artifactId>simple-jndi</artifactId>
  401 + <version>1.0.0</version>
  402 + </dependency>
  403 +
  404 + <!-- geotool -->
  405 + <dependency>
  406 + <groupId>org.locationtech.jts</groupId>
  407 + <artifactId>jts-core</artifactId>
  408 + <version>1.16.1</version>
  409 + </dependency>
  410 +
  411 + <dependency>
  412 + <groupId>org.hibernate</groupId>
  413 + <artifactId>hibernate-spatial</artifactId>
  414 + </dependency>
  415 +
  416 + <dependency>
  417 + <groupId>org.java-websocket</groupId>
  418 + <artifactId>Java-WebSocket</artifactId>
  419 + <version>1.5.3</version>
  420 + </dependency>
  421 +
  422 + <dependency>
  423 + <groupId>org.bytedeco</groupId>
  424 + <artifactId>javacv-platform</artifactId>
  425 + <version>1.5.11</version>
  426 + </dependency>
  427 + </dependencies>
  428 +
  429 + <dependencyManagement>
  430 + <dependencies>
  431 + <!-- drools 6依赖 -->
  432 + <dependency>
  433 + <groupId>org.drools</groupId>
  434 + <artifactId>drools-bom</artifactId>
  435 + <type>pom</type>
  436 + <version>6.3.0.Final</version>
  437 + <scope>import</scope>
  438 + </dependency>
  439 + </dependencies>
  440 + </dependencyManagement>
  441 +
  442 + <build>
  443 + <plugins>
  444 + <plugin>
  445 + <artifactId>maven-compiler-plugin</artifactId>
  446 + <configuration>
  447 + <source>1.8</source>
  448 + <target>1.8</target>
  449 + </configuration>
  450 + </plugin>
  451 + <plugin>
  452 + <artifactId>maven-war-plugin</artifactId>
  453 + <configuration>
  454 + <failOnMissingWebXml>false</failOnMissingWebXml>
  455 + </configuration>
  456 + </plugin>
  457 + <plugin>
  458 + <groupId>org.springframework.boot</groupId>
  459 + <artifactId>spring-boot-maven-plugin</artifactId>
  460 + </plugin>
  461 + </plugins>
  462 + <resources>
  463 + <resource>
  464 + <directory>src/main/resources</directory>
  465 + <filtering>false</filtering>
  466 + </resource>
  467 + </resources>
  468 + </build>
  469 + <repositories>
  470 + <repository>
  471 + <id>spring-snapshots</id>
  472 + <url>http://repo.spring.io/snapshot</url>
  473 + <snapshots>
  474 + <enabled>true</enabled>
  475 + </snapshots>
  476 + </repository>
  477 + <repository>
  478 + <id>spring-milestones</id>
  479 + <url>http://repo.spring.io/milestone</url>
  480 + </repository>
  481 + <repository>
  482 + <id>pentaho-public</id>
  483 + <url>https://repo.orl.eng.hitachivantara.com/artifactory/pnt-mvn/</url>
  484 + </repository>
  485 + </repositories>
  486 + <pluginRepositories>
  487 + <pluginRepository>
  488 + <id>spring-snapshots</id>
  489 + <url>http://repo.spring.io/snapshot</url>
  490 + </pluginRepository>
  491 + <pluginRepository>
  492 + <id>spring-milestones</id>
  493 + <url>http://repo.spring.io/milestone</url>
  494 + </pluginRepository>
  495 + </pluginRepositories>
  496 +
  497 + <properties>
  498 + <start-class>com.bsth.Application</start-class>
  499 + <javacpp.platform>linux-x86_64</javacpp.platform>
  500 + </properties>
  501 +</project>
src/main/java/com/bsth/entity/speech/SpeechRequest.java 0 → 100644
  1 +package com.bsth.entity.speech;
  2 +
  3 +import com.fasterxml.jackson.annotation.JsonIgnore;
  4 +
  5 +import java.util.HashMap;
  6 +import java.util.Map;
  7 +
  8 +public class SpeechRequest {
  9 +
  10 + /**
  11 + * 包含appid
  12 + */
  13 + private Map<String, Object> common = new HashMap<>();
  14 +
  15 + /**
  16 + * 音频合成参数
  17 + */
  18 + private Map<String, Object> business = new HashMap<>();
  19 +
  20 + /**
  21 + * 数据、状态参数
  22 + */
  23 + private Map<String, Object> data = new HashMap<>();
  24 +
  25 + @JsonIgnore
  26 + private boolean completed = false;
  27 +
  28 + public Map<String, Object> getCommon() {
  29 + return common;
  30 + }
  31 +
  32 + public void setCommon(Map<String, Object> common) {
  33 + this.common = common;
  34 + }
  35 +
  36 + public Map<String, Object> getBusiness() {
  37 + return business;
  38 + }
  39 +
  40 + public void setBusiness(Map<String, Object> business) {
  41 + this.business = business;
  42 + }
  43 +
  44 + public Map<String, Object> getData() {
  45 + return data;
  46 + }
  47 +
  48 + public void setData(Map<String, Object> data) {
  49 + this.data = data;
  50 + }
  51 +
  52 + public boolean isCompleted() {
  53 + return completed;
  54 + }
  55 +
  56 + public void setCompleted(boolean completed) {
  57 + this.completed = completed;
  58 + }
  59 +}
0 \ No newline at end of file 60 \ No newline at end of file
src/main/java/com/bsth/entity/speech/SpeechResponse.java 0 → 100644
  1 +package com.bsth.entity.speech;
  2 +
  3 +/**
  4 + * 讯飞在线语音合成返回json
  5 + */
  6 +public class SpeechResponse {
  7 +
  8 + private int code;
  9 +
  10 + private String message;
  11 +
  12 + private String sid;
  13 +
  14 + private AudioData data;
  15 +
  16 + public int getCode() {
  17 + return code;
  18 + }
  19 +
  20 + public void setCode(int code) {
  21 + this.code = code;
  22 + }
  23 +
  24 + public String getMessage() {
  25 + return message;
  26 + }
  27 +
  28 + public void setMessage(String message) {
  29 + this.message = message;
  30 + }
  31 +
  32 + public String getSid() {
  33 + return sid;
  34 + }
  35 +
  36 + public void setSid(String sid) {
  37 + this.sid = sid;
  38 + }
  39 +
  40 + public AudioData getData() {
  41 + return data;
  42 + }
  43 +
  44 + public void setData(AudioData data) {
  45 + this.data = data;
  46 + }
  47 +
  48 + public final static class AudioData {
  49 +
  50 + private String audio;
  51 +
  52 + private String ced;
  53 +
  54 + private int status;
  55 +
  56 + public String getAudio() {
  57 + return audio;
  58 + }
  59 +
  60 + public void setAudio(String audio) {
  61 + this.audio = audio;
  62 + }
  63 +
  64 + public String getCed() {
  65 + return ced;
  66 + }
  67 +
  68 + public void setCed(String ced) {
  69 + this.ced = ced;
  70 + }
  71 +
  72 + public int getStatus() {
  73 + return status;
  74 + }
  75 +
  76 + public void setStatus(int status) {
  77 + this.status = status;
  78 + }
  79 +
  80 + @Override
  81 + public String toString() {
  82 + return "AudioData{" +
  83 + "audio='" + audio + '\'' +
  84 + ", ced='" + ced + '\'' +
  85 + ", status=" + status +
  86 + '}';
  87 + }
  88 + }
  89 +
  90 + @Override
  91 + public String toString() {
  92 + return "SpeechResponse{" +
  93 + "code=" + code +
  94 + ", message='" + message + '\'' +
  95 + ", sid='" + sid + '\'' +
  96 + ", audioData=" + data +
  97 + '}';
  98 + }
  99 +}
0 \ No newline at end of file 100 \ No newline at end of file
src/main/java/com/bsth/service/impl/StationRouteServiceImpl.java
1 -package com.bsth.service.impl;  
2 -  
3 -import com.bsth.common.ResponseCode;  
4 -import com.bsth.entity.*;  
5 -import com.bsth.entity.search.CustomerSpecs;  
6 -import com.bsth.repository.*;  
7 -import com.bsth.service.StationRouteService;  
8 -import com.bsth.util.CoordinateConverter;  
9 -import com.bsth.util.ExcelUtil;  
10 -import com.bsth.util.FTPClientUtils;  
11 -import com.bsth.util.Geo.GeoUtils;  
12 -import com.bsth.util.Geo.Point;  
13 -import com.bsth.util.PackTarGZUtils;  
14 -import com.bsth.util.db.DBUtils_MS;  
15 -import com.google.common.base.Splitter;  
16 -import org.apache.commons.lang3.StringUtils;  
17 -import org.geolatte.geom.Polygon;  
18 -import org.springframework.beans.factory.annotation.Autowired;  
19 -import org.springframework.data.domain.Sort;  
20 -import org.springframework.data.domain.Sort.Direction;  
21 -import org.springframework.stereotype.Service;  
22 -  
23 -import javax.servlet.http.HttpServletResponse;  
24 -import java.io.ByteArrayInputStream;  
25 -import java.io.File;  
26 -import java.io.InputStream;  
27 -import java.text.DecimalFormat;  
28 -import java.util.*;  
29 -  
30 -/**  
31 - *  
32 - * @ClassName: StationRouteServiceImpl(站点路由service业务层实现类)  
33 - *  
34 - * @Extends : BaseService  
35 - *  
36 - * @Description: TODO(站点路由service业务层)  
37 - *  
38 - * @Author bsth@lq  
39 - *  
40 - * @Date 2016年5月03日 上午9:21:17  
41 - *  
42 - * @Version 公交调度系统BS版 0.1  
43 - *  
44 - */  
45 -  
46 -@Service  
47 -public class StationRouteServiceImpl extends BaseServiceImpl<StationRoute, Integer> implements StationRouteService{  
48 -  
49 - @Autowired  
50 - private StationRouteRepository stationRouteRepository;  
51 -  
52 - @Autowired  
53 - private SectionRouteRepository sectionRouteRepository;  
54 -  
55 - @Autowired  
56 - private LineRepository lineRepository;  
57 -  
58 - @Autowired  
59 - private StationRepository stationRepository;  
60 -  
61 - @Autowired  
62 - private BusinessRepository businessRepository;  
63 -  
64 - @Autowired  
65 - private LsStationRouteRepository lsStationRouteRepository;  
66 -  
67 - @Autowired  
68 - private LsSectionRouteRepository lsSectionRouteRepository;  
69 -  
70 - @Override  
71 - public Iterable<StationRoute> list(Map<String, Object> map) {  
72 - List<Sort.Order> orders = new ArrayList<>();  
73 - orders.add(new Sort.Order(Direction.ASC, "directions"));  
74 - orders.add(new Sort.Order(Direction.ASC, "stationRouteCode"));  
75 -  
76 - return stationRouteRepository.findAll(new CustomerSpecs<>(map), Sort.by(orders));  
77 - }  
78 -  
79 - @Override  
80 - public Map<String, Object> getSectionRouteExport(Integer id, HttpServletResponse resp) {  
81 - Map<String, Object> resultMap = new HashMap<String, Object>();  
82 - try {  
83 - // List<Map<String, Object>> resultList = new ArrayList<Map<String,Object>>();  
84 - Map<String,Object> resultExcel = new HashMap<String,Object>();//导出参数的对象  
85 - /* 添加表头*/  
86 - List<String> title = new ArrayList<String>();  
87 - title.add("线路ID");  
88 - title.add("方向");  
89 - title.add("站点编码");  
90 - title.add("站点顺序号");  
91 - title.add("站点备注");  
92 - title.add("站点名称");  
93 - title.add("站点距离(km)");  
94 - title.add("站点时长(min)");  
95 - title.add("线路名称");  
96 - resultExcel.put("title", title);  
97 - /* 添加表单*/  
98 - Map<String,List<String>> temp = new HashMap<String,List<String>>();  
99 - List<StationRoute> strtionList = stationRouteRepository.findStationExport(id);  
100 - if(strtionList == null){  
101 - logger.info("没有数据导,出用户信息失败!");  
102 - } else {  
103 -  
104 - for (int i = 0; i < strtionList.size(); i++) {  
105 - StationRoute station = strtionList.get(i);  
106 -  
107 - List<String> varList = new ArrayList<String>();  
108 - varList.add(station.getLine().getId().toString());  
109 - varList.add(station.getDirections().toString());  
110 - varList.add(station.getStationCode());  
111 - varList.add(station.getStationRouteCode().toString());  
112 - varList.add(station.getStationMark());  
113 - varList.add(station.getStationName());  
114 - varList.add(station.getDistances().toString());  
115 - varList.add(station.getToTime().toString());  
116 - varList.add(station.getLine().getName());  
117 - temp.put((i+1)+"", varList);  
118 - }  
119 - }  
120 - resultExcel.put("content", temp);  
121 - ExcelUtil excelUtil = new ExcelUtil();  
122 - excelUtil.buildExcelDocument(resultExcel, strtionList.get(0).getLine().getName()+"线路站点",resp);  
123 - resultMap.put("status", ResponseCode.SUCCESS);  
124 - } catch (Exception e) {  
125 - resultMap.put("status", ResponseCode.ERROR);  
126 - logger.error("save erro.", e);  
127 - }  
128 - return resultMap;  
129 - }  
130 -  
131 - /**  
132 - * @Description :TODO(查询树站点与路段数据)  
133 - *  
134 - * @param map <line.id_eq:线路ID; directions_eq:方向>  
135 - *  
136 - * @return List<Map<String, Object>>  
137 - */  
138 - @Override  
139 - public Map<String, Object> findRoutes(Map<String, Object> map) {  
140 - Map<String, Object> result = new HashMap<>();  
141 - List<StationRoute> stationList = stationRouteRepository.findAll(new CustomerSpecs<>(map), Sort.by(Direction.ASC, "directions", "stationRouteCode"));  
142 - List<SectionRoute> sectionList = sectionRouteRepository.findAll(new CustomerSpecs<>(map), Sort.by(Direction.ASC, "directions", "sectionrouteCode"));  
143 -  
144 - result.put("stationRoutes", stationList);  
145 - result.put("sectionRoutes", sectionList);  
146 -  
147 - return result;  
148 - }  
149 -  
150 - @Override  
151 - public Map<String, Object> systemQuote(Map<String, Object> map) {  
152 - Map<String, Object> resultmap = new HashMap<>();  
153 - try{  
154 -  
155 - StationRoute route = new StationRoute();  
156 -  
157 - Integer lineId = map.get("lineId").equals("") ? null : Integer.parseInt(map.get("lineId").toString());  
158 -  
159 - Integer stationId = map.get("stationId").equals("") ? null : Integer.parseInt(map.get("stationId").toString());  
160 -  
161 - Line line = lineRepository.findById(lineId).get();  
162 -  
163 - Station station = stationRepository.findById(stationId).get();  
164 -  
165 - route.setLine(line);  
166 -  
167 - route.setStation(station);  
168 -  
169 - //baseRepository.save(t);  
170 - resultmap.put("status", ResponseCode.SUCCESS);  
171 - }catch(Exception e){  
172 - resultmap.put("status", ResponseCode.ERROR);  
173 - logger.error("save erro.", e);  
174 - }  
175 - return resultmap;  
176 - }  
177 -  
178 - /**  
179 - * @Description :TODO(查询线路某方向下的站点序号与类型)  
180 - *  
181 - * @param map <lineId:线路ID; direction:方向;stationRouteCode:站点编码>  
182 - *  
183 - * @return List<Map<String, Object>>  
184 - */  
185 - @Override  
186 - public List<Map<String, Object>> findUpStationRouteCode(Map<String, Object> map) {  
187 - Integer lineId = map.get("lineId").equals("") ? null : Integer.parseInt(map.get("lineId").toString());  
188 - Integer direction = map.get("direction").equals("") ? null : Integer.parseInt(map.get("direction").toString());  
189 - Integer stationRouteCode = map.get("stationRouteCode").equals("") ? null : Integer.parseInt(map.get("stationRouteCode").toString());  
190 - List<Object[]> reslutList = stationRouteRepository.findUpStationRouteCode(lineId, direction, stationRouteCode);  
191 - List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();  
192 - if(reslutList.size()>0) {  
193 - for(int i = 0 ; i <reslutList.size() ;i++){  
194 - Map<String, Object> tempM = new HashMap<String, Object>();  
195 - tempM.put("stationRouteCode", reslutList.get(i)[0]);  
196 - tempM.put("stationRouteMarke", reslutList.get(i)[1]);  
197 - list.add(tempM);  
198 - }  
199 - }  
200 - return list;  
201 - }  
202 -  
203 - private void traversalStation(List<LsStationRoute> stationRoutes, List<Map<String, Object>> resultList, int len) {  
204 - for(int i = 0 ; i < len; i++) {  
205 - LsStationRoute stationRoute = stationRoutes.get(i);  
206 - Map<String, Object> tempM = new HashMap<String,Object>();  
207 -  
208 - tempM.put("stationRouteLine", stationRoute.getLine().getId());  
209 -  
210 - tempM.put("stationRouteStation", stationRoute.getStation().getId());  
211 -  
212 - tempM.put("stationRouteCode", stationRoute.getStationRouteCode());  
213 -  
214 - tempM.put("stationRouteLIneCode", stationRoute.getLineCode());  
215 -  
216 - tempM.put("stationRouteStationMark", stationRoute.getStationMark());  
217 -  
218 - tempM.put("stationOutStationNmber", stationRoute.getOutStationNmber());  
219 -  
220 - tempM.put("stationRoutedirections", stationRoute.getDirections());  
221 -  
222 - tempM.put("stationRouteDistances", stationRoute.getDistances());  
223 -  
224 - tempM.put("stationRouteToTime", stationRoute.getToTime());  
225 -  
226 - tempM.put("staitonRouteFirstTime", stationRoute.getFirstTime());  
227 -  
228 - tempM.put("stationRouteEndTime", stationRoute.getEndTime());  
229 -  
230 - tempM.put("stationRouteDescriptions", stationRoute.getDescriptions());  
231 -  
232 - tempM.put("stationRouteDestroy", stationRoute.getDestroy());  
233 -  
234 - tempM.put("stationRouteVersions", stationRoute.getVersions());  
235 -  
236 - tempM.put("stationRouteCreateBy", stationRoute.getCreateBy());  
237 -  
238 - tempM.put("stationRouteCreateDate", stationRoute.getCreateDate());  
239 -  
240 - tempM.put("stationRouteUpdateBy", stationRoute.getUpdateBy());  
241 -  
242 - tempM.put("stationRouteUpdateDate", stationRoute.getUpdateDate());  
243 -  
244 - tempM.put("stationId", stationRoute.getStation().getId());  
245 -  
246 - tempM.put("stationCode", stationRoute.getStation().getStationCode());  
247 -  
248 - tempM.put("stationRouteName", stationRoute.getStationName());  
249 -  
250 - tempM.put("stationRoadCoding", stationRoute.getStation().getRoadCoding());  
251 -  
252 - tempM.put("stationJwpoints", stationRoute.getStation().getCenterPoint().toString());  
253 -  
254 - CoordinateConverter.Location location = CoordinateConverter.LocationMake(stationRoute.getStation().getCenterPointWgs().toString());  
255 - tempM.put("stationGlonx", location.getLng());  
256 -  
257 - tempM.put("stationGlaty", location.getLat());  
258 -  
259 - Polygon polygon = stationRoute.getBufferPolygon(), polygonWgs = stationRoute.getBufferPolygonWgs();  
260 - tempM.put("stationBPolyonGrid", polygon == null ? "" : polygon.toString());  
261 -  
262 - tempM.put("stationGPloyonGrid", polygonWgs == null ? "" : polygonWgs.toString());  
263 -  
264 - tempM.put("stationDestroy", stationRoute.getStation().getDestroy());  
265 -  
266 - tempM.put("stationRadius", stationRoute.getRadius());  
267 -  
268 - tempM.put("stationShapesType", stationRoute.getShapedType());  
269 -  
270 - tempM.put("stationVersions", stationRoute.getStation().getVersions());  
271 -  
272 - tempM.put("sttationDescriptions", stationRoute.getStation().getDescriptions());  
273 -  
274 - tempM.put("stationCreateBy", stationRoute.getStation().getCreateBy());  
275 -  
276 - tempM.put("stationCreateDate", stationRoute.getStation().getCreateDate());  
277 -  
278 - tempM.put("stationUpdateBy", stationRoute.getStation().getUpdateBy());  
279 -  
280 - tempM.put("stationUpdateDate", stationRoute.getStation().getUpdateDate());  
281 -  
282 - tempM.put("stationRouteId", stationRoute.getId());  
283 - tempM.put("zdmc", stationRoute.getStationName());  
284 - // 行业编码  
285 - tempM.put("industryCode", stationRoute.getIndustryCode());  
286 - try {  
287 - tempM.put("stationNameEn", stationRoute.getStationNameEn());  
288 - } catch (Exception e) {  
289 - e.printStackTrace();  
290 - }  
291 -  
292 - resultList.add(tempM);  
293 - }  
294 - }  
295 -  
296 - /**  
297 - * @Description :TODO(查询线路某方向下所有站点的中心百度坐标)  
298 - *  
299 - * @param map <lineId:线路ID; direction:方向>  
300 - *  
301 - * @return List<Map<String, Object>>  
302 - */  
303 - @Override  
304 - public List<Map<String, Object>> getStationRouteCenterPoints(Map<String, Object> map) {  
305 -  
306 - List<Map<String, Object>> resultList = new ArrayList<Map<String,Object>>();  
307 -  
308 - // 线路ID  
309 - Integer lineId = map.get("lineId").equals("") ? null : Integer.parseInt(map.get("lineId").toString());  
310 -  
311 - // 方向  
312 - Integer direction = map.get("direction").equals("") ? null : Integer.parseInt(map.get("direction").toString());  
313 -  
314 - List<Object[]> list = stationRouteRepository.getSelectStationRouteCenterPoints(lineId, direction);  
315 -  
316 - if(list.size()>0) {  
317 -  
318 - for(int i = 0;i<list.size();i++) {  
319 -  
320 - Map<String, Object> tempM = new HashMap<String,Object>();  
321 -  
322 - tempM.put("bJwpoints", list.get(i)[0]);  
323 -  
324 - tempM.put("stationName", list.get(i)[1]);  
325 -  
326 - resultList.add(tempM);  
327 -  
328 - }  
329 -  
330 - }  
331 -  
332 - return resultList;  
333 - }  
334 -  
335 - /**  
336 - * @Description :TODO(查询线路某方向下所有站点)  
337 - *  
338 - * @param map <lineId:线路ID; direction:方向>  
339 - *  
340 - * @return List<Map<String, Object>>  
341 - */  
342 - @Override  
343 - public List<Map<String, Object>> getStationRouteList(Map<String, Object> map) {  
344 - if (map.get("line.id_eq") == null || map.get("directions_eq") == null || map.get("versions_eq") == null) {  
345 - throw new IllegalArgumentException("需正确传入线路、方向、版本参数");  
346 - }  
347 - map.put("destroy_eq", 0);  
348 - List<LsStationRoute> stationRoutes = lsStationRouteRepository.findAll(new CustomerSpecs<>(map), Sort.by(Direction.ASC, "stationRouteCode"));  
349 -  
350 - List<Map<String, Object>> resultList = new ArrayList<>();  
351 -  
352 - int len = stationRoutes.size();  
353 -  
354 - if(len > 0) {  
355 - // 遍历站点  
356 - traversalStation(stationRoutes, resultList, len);  
357 - }  
358 - return resultList;  
359 - }  
360 -  
361 - /**  
362 - * @Description :TODO(撤销站点)  
363 - *  
364 - * @param map <lineId:线路ID; destroy:是否撤销(0:否;1:是)>  
365 - *  
366 - * @return Map<String, Object> <SUCCESS ; ERROR>  
367 - */  
368 - @Override  
369 - public Map<String, Object> stationRouteIsDestroy(Map<String, Object> map) {  
370 - Map<String, Object> resultMap = new HashMap<String,Object>();  
371 -  
372 - try {  
373 -  
374 - Integer stationRouteId = map.get("stationRouteId").equals("") ? 0 : Integer.parseInt(map.get("stationRouteId").toString());  
375 -  
376 - Integer destroy = map.get("destroy").equals("") ? 0 : Integer.parseInt(map.get("destroy").toString());  
377 -  
378 - lsStationRouteRepository.deleteById(stationRouteId);  
379 -  
380 - resultMap.put("status", ResponseCode.SUCCESS);  
381 -  
382 - } catch (Exception e) {  
383 -  
384 - resultMap.put("status", ResponseCode.ERROR);  
385 -  
386 - logger.error("save erro.", e);  
387 -  
388 - }  
389 -  
390 - return resultMap;  
391 - }  
392 -  
393 - /**  
394 - * @Description : TODO(根据线路ID生成行单)  
395 - *  
396 - * @param map <lineId:线路ID>  
397 - *  
398 - * @return Map<String, Object> <SUCCESS ; ERROR ; NOTDATA>  
399 - */  
400 - @Override  
401 - public Map<String, Object> usingSingle(Map<String, Object> map) {  
402 - // 返回值map  
403 - Map<String, Object> resultMap = new HashMap<String,Object>();  
404 - try {  
405 - // 获取线路ID  
406 - Integer lineId = map.get("lineId").equals("") ? 0 : Integer.parseInt(map.get("lineId").toString());  
407 - /** 查询线路信息 @param:<lineId:线路ID> */  
408 - Line line = lineRepository.findById(lineId).get();  
409 -  
410 -  
411 - Business company = businessRepository.findByBusinessCode(line.getCompany()).get(0);  
412 -  
413 - Integer fileVersions = lineRepository.findfileVersions(lineId);  
414 - if(fileVersions == null) {  
415 - lineRepository.addFileVersions(line.getId(), line.getLineCode());  
416 - fileVersions = 1;  
417 - } else {  
418 - fileVersions = fileVersions + 1;  
419 - lineRepository.editFileVersions(line.getId(),fileVersions);  
420 - }  
421 -// Integer fileVersions = map.get("fileVersions").equals("") ? 1 : Integer.parseInt(map.get("fileVersions").toString());// 没有输入就默认1  
422 - /** 查询线路信息下的站点路由信息 @param:<lineId:线路ID> */  
423 - List<Object[]> objects = stationRouteRepository.usingSingle(lineId);  
424 - if (objects.size()>0) {  
425 - /** 获取配置文件里的ftp登录参数 */  
426 - Map<String, Object> FTPParamMap = readPropertiesGetFTPParam();  
427 - // 压缩文件名  
428 - String odlGzFileName = line.getLineCode() + ".txt.gz";  
429 - // txt文件名  
430 - String textFileName = line.getLineCode() + ".txt";  
431 - // 创建一个ftp上传实例  
432 - FTPClientUtils clientUtils = new FTPClientUtils();  
433 - // IP  
434 - String url = FTPParamMap.get("url").toString();  
435 - // 端口  
436 - int port = Integer.valueOf(FTPParamMap.get("port").toString());  
437 - // 用户名  
438 - String username = FTPParamMap.get("username").toString();  
439 - // 密码  
440 - String password = FTPParamMap.get("password").toString();  
441 - // 相对路径  
442 - String remotePath = FTPParamMap.get("remotePath").toString();  
443 - /** 如果已存在相同行单文件名则先删除 */  
444 - clientUtils.deleteFtpFile(url, port, username, password, remotePath, odlGzFileName);  
445 - clientUtils.deleteFtpFile(url, port, username, password, remotePath, textFileName);  
446 - clientUtils.deleteFtpFile(url, port, username, password, remotePath + "/voice/", textFileName);  
447 - String textStr = "";  
448 -// boolean tempTag = ishxType(objects);  
449 - Integer linePlayType = line.getLinePlayType() == null ? -1:line.getLinePlayType();  
450 - if(linePlayType == 1)  
451 - textStr = hxTextFileToFtp(objects,lineId);// 环线行单文件内容  
452 - else if (linePlayType == 0)  
453 - textStr = newTextFileToFTP(objects,lineId);/** 双向行单文件内容 @param:<objects:站点路由;lineId:线路ID>*/  
454 - else  
455 - resultMap.put("status","NOLinePlayType");// 线路无线路规划类型  
456 -  
457 - textStr = line.getName() + " " + fileVersions + "\r\n" + textStr;  
458 - InputStream input = new ByteArrayInputStream(textStr.getBytes("gbk"));  
459 - /** 生成txt文件,上传ftp */  
460 - clientUtils.uploadFile(url, port, username, password, remotePath, textFileName, input);  
461 - // 创建打包实例  
462 - PackTarGZUtils packTarGZUtils= new PackTarGZUtils();  
463 - /** 获取txt文件 */  
464 - File textFile = clientUtils.GetFtpFile(url, port, username, password, remotePath, textFileName);  
465 - File target = new File(odlGzFileName);  
466 - // 将txt文件打包  
467 - File targetFile = PackTarGZUtils.compress(textFile, target);  
468 - clientUtils.FTPUpLoadFromDisk(targetFile, targetFile.getName(), url, port, username, password, remotePath);  
469 - // 删除文件  
470 - textFile.delete();  
471 - targetFile.delete();  
472 -  
473 -  
474 - textStr = newTextVoiceFileToFTP(objects,lineId);  
475 -  
476 - String lineName = line.getName();  
477 -  
478 - /*try {  
479 - lineName = Integer.parseInt(line.getName().replace("路", "")) + "";  
480 - } catch (Exception e) {  
481 - }*/  
482 -  
483 - String head = lineName + " " + fileVersions + " " + line.getStartStationFirstTime() + "-" + line.getStartStationEndTime() + " " + line.getEndStationFirstTime() + "-" + line.getEndStationEndTime() + " " + line.getTicketPrice() + " " + company.getBusinessName().replace("公司", "公交") + " " + (company.getPhoneNum()== null ? "-" : company.getPhoneNum());  
484 -  
485 - textStr = head +"\r\n" + textStr;  
486 -  
487 - input = new ByteArrayInputStream(textStr.getBytes("gbk"));  
488 -  
489 - clientUtils.uploadFile(url, port, username, password, remotePath + "/voice/", textFileName, input);  
490 -  
491 -// textFile.delete();  
492 -  
493 -  
494 - resultMap.put("status", ResponseCode.SUCCESS);  
495 - }else {  
496 - resultMap.put("status","NOTDATA");  
497 - }  
498 - } catch (Exception e) {  
499 - resultMap.put("status", ResponseCode.ERROR);  
500 - logger.error("save erro.", e);  
501 - } finally {  
502 - return resultMap;  
503 - }  
504 - }  
505 -  
506 - /**  
507 - * @Description : TODO(形成行单文件内容)  
508 - *  
509 - * @param objects :站点路由信息  
510 - *  
511 - * {[0]:g_lonx(GPS经度);[1]:g_laty(GPS纬度);[2]:b_jwpoints(百度经纬度坐标)  
512 - *  
513 - * [3]:station_mark(站点类型);[4]:station_route_code(站点序号);[5]:station_cod(站点编码);  
514 - *  
515 - * [6]:distances(站点距离);[7]:station_name(站点名称);[8]:directions(方向)}  
516 - *  
517 - * @param lineId :线路ID  
518 - *  
519 - * @return String  
520 - */  
521 - public String newTextFileToFTP(List<Object[]> objects,Integer lineId) {  
522 -  
523 - // 返回值String  
524 - String stationRStr = "";  
525 - // windows下的文本文件换行符  
526 - //String enterStr = "\r\n";  
527 - // linux/unix下的文本文件换行符  
528 - String enterStr = "\r";  
529 - int defaultZdxh = 0;  
530 - if(objects.size()>0) {  
531 - for(int i = 0; i<objects.size();i++) {  
532 - defaultZdxh ++ ;  
533 - // 经度  
534 - String lng = objects.get(i)[0].equals("") ? "0" : objects.get(i)[0].toString();  
535 -  
536 - // 纬度  
537 - String lat = objects.get(i)[1].equals("") ? "0" : objects.get(i)[1].toString();  
538 -  
539 - Point point = new Point(Double.valueOf(lng), Double.valueOf(lat));  
540 -  
541 - lat = "\t" + lat;  
542 -  
543 - // 站点类型  
544 - String stationMakeStr = objects.get(i)[3].equals("") ? "" : objects.get(i)[3].toString();  
545 -  
546 - String stationMake = "";  
547 -  
548 - if(stationMakeStr.equals("E")) {  
549 - stationMake = "\t2";  
550 - }else {  
551 - stationMake ="\t1";  
552 - }  
553 -  
554 - // 站点序号  
555 - // String stationNo = objects.get(i)[4].equals("") ? "" : objects.get(i)[4].toString();  
556 - String stationNo = String.valueOf(defaultZdxh);  
557 -  
558 - stationNo = "\t" + stationNo;  
559 -  
560 - // 站点编码  
561 - String stationCode = objects.get(i)[5].equals("") ? "" : objects.get(i)[5].toString();  
562 -  
563 - int len = stationCode.length();  
564 - if(len<8) {  
565 - int dx = 8 - len;  
566 - String addStr = "";  
567 - for(int p =0;p<dx;p++) {  
568 - addStr = addStr + "0";  
569 - }  
570 - stationCode = addStr + stationCode;  
571 - }else if(len>8){  
572 - stationCode = stationCode.substring(8);  
573 - }  
574 -  
575 - stationCode = "\t" +stationCode;  
576 -  
577 - double dis = objects.get(i)[6]==null ? 0.0 : Double.parseDouble(objects.get(i)[6].toString())*1000;  
578 -  
579 - String tempDistc = String.valueOf((int) dis);  
580 -  
581 - // 站点距离  
582 - String staitondistance = "\t" + tempDistc;  
583 -  
584 - // 站点名称  
585 - String stationName = objects.get(i)[7].equals("") ? "" : objects.get(i)[7].toString();  
586 -  
587 - stationName = "\t" +stationName;  
588 -  
589 - // 限速  
590 - // String sleepStr = " " + "60";  
591 -  
592 - // 限速  
593 - String sleepStr = "";  
594 - // 方向  
595 - int directions = objects.get(i)[8]==null ? null : Integer.valueOf(objects.get(i)[8].toString());  
596 - /** 获取路段路由信息 @pararm:<lineId:线路ID;directions:方向> */  
597 - List<Object[]> sobje = sectionRouteRepository.sectionRouteVector(lineId,directions);  
598 - if(sobje.size()==1) {  
599 - double dsleepStrt = sobje.get(0)[2] == null ? 60d : Double.valueOf(sobje.get(0)[2].toString());  
600 - sleepStr = "\t" + new DecimalFormat("0").format(dsleepStrt);  
601 -// int dsleepStr = sobje.get(0)[2] == null || sobje.get(0)[2].equals("") ? 60 : Integer.valueOf(sobje.get(0)[2].toString());  
602 -// sleepStr = "\t" + String.valueOf(dsleepStr);  
603 - }else if(sobje.size()>1){  
604 - for(int j =0;j<sobje.size();j++) {  
605 - double dsleepStrt = sobje.get(j)[2] == null || sobje.get(j)[2].equals("") ? 60d : Double.valueOf(sobje.get(j)[2].toString());  
606 - String pointsStr = sobje.get(j)[1]==null || sobje.get(j)[1].equals("") ? null : sobje.get(j)[1].toString();  
607 - pointsStr = pointsStr.substring(11, pointsStr.length()-1);  
608 - List<Point> ps = new ArrayList<>();  
609 - String[] pArray = pointsStr.split(",");  
610 - for(int a = 0; a <pArray.length; a++) {  
611 - String[] tmepA = pArray[a].split(" ");  
612 - Point temp = new Point(Double.valueOf(tmepA[0]), Double.valueOf(tmepA[1]));  
613 - ps.add(temp);  
614 - }  
615 - if(GeoUtils.isInSection(ps, point)) {  
616 - sleepStr = "\t" + String.valueOf((int)dsleepStrt);  
617 - break;  
618 - }  
619 - }  
620 - }  
621 - if(sleepStr.equals(""))  
622 - sleepStr = "\t" + "60";  
623 - stationRStr = stationRStr + lng + lat + stationMake + stationNo + stationCode + staitondistance + sleepStr + stationName + enterStr;  
624 - }  
625 -  
626 - }  
627 - return stationRStr;  
628 -  
629 - }  
630 -  
631 - public String newTextVoiceFileToFTP(List<Object[]> objects,Integer lineId) {  
632 -  
633 - // 返回值String  
634 - String stationRStr = "";  
635 - // windows下的文本文件换行符  
636 - String enterStr = "\r\n";  
637 - // linux/unix下的文本文件换行符  
638 -// String enterStr = "\r";  
639 - int defaultZdxh = 0;  
640 - if(objects.size()>0) {  
641 - for(int i = 0; i<objects.size();i++) {  
642 - defaultZdxh ++ ;  
643 - // 经度  
644 - String lng = objects.get(i)[0].equals("") ? "0" : objects.get(i)[0].toString();  
645 -  
646 - // 纬度  
647 - String lat = objects.get(i)[1].equals("") ? "0" : objects.get(i)[1].toString();  
648 -  
649 - Point point = new Point(Double.valueOf(lng), Double.valueOf(lat));  
650 -  
651 - lat = "\t" + lat;  
652 -  
653 - // 站点类型  
654 - String stationMakeStr = objects.get(i)[3].equals("") ? "" : objects.get(i)[3].toString();  
655 -  
656 - String stationMake = "";  
657 -  
658 - if(stationMakeStr.equals("E")) {  
659 - stationMake = "\t2";  
660 - }else {  
661 - stationMake ="\t1";  
662 - }  
663 -  
664 - // 站点序号  
665 - // String stationNo = objects.get(i)[4].equals("") ? "" : objects.get(i)[4].toString();  
666 - String stationNo = String.valueOf(defaultZdxh);  
667 -  
668 - stationNo = "\t" + stationNo;  
669 -  
670 - // 站点编码  
671 - String stationCode = objects.get(i)[5].equals("") ? "" : objects.get(i)[5].toString();  
672 -  
673 - int len = stationCode.length();  
674 - if(len<8) {  
675 - int dx = 8 - len;  
676 - String addStr = "";  
677 - for(int p =0;p<dx;p++) {  
678 - addStr = addStr + "0";  
679 - }  
680 - stationCode = addStr + stationCode;  
681 - }else if(len>8){  
682 - stationCode = stationCode.substring(8);  
683 - }  
684 -  
685 - stationCode = "\t" +stationCode;  
686 -  
687 - double dis = objects.get(i)[6]==null ? 0.0 : Double.parseDouble(objects.get(i)[6].toString())*1000;  
688 -  
689 - String tempDistc = String.valueOf((int) dis);  
690 -  
691 - // 站点距离  
692 - String staitondistance = "\t" + tempDistc;  
693 -  
694 - // 站点名称  
695 - String stationName = objects.get(i)[7].equals("") ? " " : objects.get(i)[7].toString();  
696 -  
697 - String stationNameEn = " ";  
698 - if(objects.get(i)[9] != null){  
699 - stationNameEn = objects.get(i)[9].equals("") ? " " : objects.get(i)[9].toString();  
700 - }  
701 -  
702 -  
703 - stationName = "\t" +stationName;  
704 - stationNameEn = "\t" +stationNameEn;  
705 -  
706 - // 限速  
707 - // String sleepStr = " " + "60";  
708 -  
709 - // 限速  
710 - String sleepStr = "";  
711 - // 方向  
712 - int directions = objects.get(i)[8]==null ? null : Integer.valueOf(objects.get(i)[8].toString());  
713 - if (directions == 1) {  
714 - stationName = stationName.replaceAll("\\(起点站\\)", "").replaceAll("\\(终点站\\)", "").replaceAll("(起点站)", "").replaceAll("(终点站)", "");  
715 - }  
716 - /** 获取路段路由信息 @pararm:<lineId:线路ID;directions:方向> */  
717 - List<Object[]> sobje = sectionRouteRepository.sectionRouteVector(lineId,directions);  
718 - if(sobje.size()==1) {  
719 - double dsleepStrt = sobje.get(0)[2] == null ? 60d : Double.valueOf(sobje.get(0)[2].toString());  
720 - sleepStr = "\t" + new DecimalFormat("0").format(dsleepStrt);  
721 -// int dsleepStr = sobje.get(0)[2] == null || sobje.get(0)[2].equals("") ? 60 : Integer.valueOf(sobje.get(0)[2].toString());  
722 -// sleepStr = "\t" + String.valueOf(dsleepStr);  
723 - }else if(sobje.size()>1){  
724 - for(int j =0;j<sobje.size();j++) {  
725 - double dsleepStrt = sobje.get(j)[2] == null || sobje.get(j)[2].equals("") ? 60d : Double.valueOf(sobje.get(j)[2].toString());  
726 - String pointsStr = sobje.get(j)[1]==null || sobje.get(j)[1].equals("") ? null : sobje.get(j)[1].toString();  
727 - pointsStr = pointsStr.substring(11, pointsStr.length()-1);  
728 - List<Point> ps = new ArrayList<>();  
729 - String[] pArray = pointsStr.split(",");  
730 - for(int a = 0; a <pArray.length; a++) {  
731 - String[] tmepA = pArray[a].split(" ");  
732 - Point temp = new Point(Double.valueOf(tmepA[0]), Double.valueOf(tmepA[1]));  
733 - ps.add(temp);  
734 - }  
735 - if(GeoUtils.isInSection(ps, point)) {  
736 - sleepStr = "\t" + String.valueOf((int)dsleepStrt);  
737 - break;  
738 - }  
739 - }  
740 - }  
741 - if(sleepStr.equals(""))  
742 - sleepStr = "\t" + "60";  
743 - stationRStr = stationRStr + lng + lat + stationMake + stationNo + stationCode + staitondistance + sleepStr + stationName + stationNameEn + enterStr;  
744 - }  
745 -  
746 - }  
747 - return stationRStr;  
748 -  
749 - }  
750 -  
751 - public String hxTextFileToFtp(List<Object[]> objects,Integer lineId) {  
752 - String restStr = "";  
753 - // windows下的文本文件换行符  
754 - //String enterStr = "\r\n";  
755 - // linux/unix下的文本文件换行符  
756 - String enterStr = "\r";  
757 - int xh = 1 ;  
758 - for(int x =0;x<2;x++) {  
759 - for(int i = 0; i<objects.size();i++) {  
760 - if(Integer.valueOf(objects.get(i)[8].toString())==0) {  
761 - // 经度  
762 - String lng = objects.get(i)[0].equals("") ? "0" : objects.get(i)[0].toString();  
763 -  
764 - // 纬度  
765 - String lat = objects.get(i)[1].equals("") ? "0" : objects.get(i)[1].toString();  
766 -  
767 - Point point = new Point(Double.valueOf(lng), Double.valueOf(lat));  
768 - lat = "\t" + lat;  
769 - // 站点类型  
770 - String stationMakeStr = objects.get(i)[3].equals("") ? "" : objects.get(i)[3].toString();  
771 - String stationMake = "";  
772 - if(stationMakeStr.equals("E")) {  
773 - stationMake = "\t2";  
774 - }else {  
775 - stationMake ="\t1";  
776 - }  
777 - // 站点序号  
778 - // String stationNo = objects.get(i)[4].equals("") ? "" : objects.get(i)[4].toString();  
779 - String stationNo = "\t" + xh;  
780 - // 站点编码  
781 - String stationCode = objects.get(i)[5].equals("") ? "" : objects.get(i)[5].toString();  
782 - int len = stationCode.length();  
783 - if(len<8) {  
784 - int dx = 8 - len;  
785 - String addStr = "";  
786 - for(int p =0;p<dx;p++) {  
787 - addStr = addStr + "0";  
788 - }  
789 - stationCode = addStr + stationCode;  
790 - }else if(len>8){  
791 - stationCode = stationCode.substring(8);  
792 - }  
793 - stationCode = "\t" +stationCode;  
794 - double dis = objects.get(i)[6]==null ? 0.0 : Double.parseDouble(objects.get(i)[6].toString())*1000;  
795 - String tempDistc = String.valueOf((int) dis);  
796 - // 站点距离  
797 - String staitondistance = "\t" + tempDistc;  
798 - // 站点名称  
799 - String stationName = objects.get(i)[7].equals("") ? "" : objects.get(i)[7].toString();  
800 - stationName = "\t" +stationName;  
801 - // 限速  
802 - String sleepStr = "";  
803 - // 方向  
804 - int directions = objects.get(i)[8]==null ? null : Integer.valueOf(objects.get(i)[8].toString());  
805 - if (directions == 1) {  
806 - stationName = stationName.replaceAll("\\(起点站\\)", "").replaceAll("\\(终点站\\)", "").replaceAll("(起点站)", "").replaceAll("(终点站)", "");  
807 - }  
808 - /** 获取路段路由信息 @pararm:<lineId:线路ID;directions:方向> */  
809 - List<Object[]> sobje = sectionRouteRepository.sectionRouteVector(lineId,directions);  
810 - if(sobje.size()==1) {  
811 -// int dsleepStr = sobje.get(0)[2] == null || sobje.get(0)[2].equals("") ? 60 : Integer.valueOf(sobje.get(0)[2].toString());  
812 -// sleepStr = "\t" + String.valueOf(dsleepStr);  
813 - double dsleepStrt = sobje.get(0)[2] == null ? 60d : Double.valueOf(sobje.get(0)[2].toString());  
814 - sleepStr = "\t" + new DecimalFormat("0").format(dsleepStrt);  
815 - }else if(sobje.size()>1){  
816 - for(int j =0;j<sobje.size();j++) {  
817 - double dsleepStrt = sobje.get(j)[2] == null || sobje.get(j)[2].equals("") ? 60d : Double.valueOf(sobje.get(j)[2].toString());  
818 - String pointsStr = sobje.get(j)[1]==null || sobje.get(j)[1].equals("") ? null : sobje.get(j)[1].toString();  
819 - pointsStr = pointsStr.substring(11, pointsStr.length()-1);  
820 - List<Point> ps = new ArrayList<>();  
821 - String[] pArray = pointsStr.split(",");  
822 - for(int a = 0; a <pArray.length; a++) {  
823 - String[] tmepA = pArray[a].split(" ");  
824 - Point temp = new Point(Double.valueOf(tmepA[0]), Double.valueOf(tmepA[1]));  
825 - ps.add(temp);  
826 - }  
827 - if(GeoUtils.isInSection(ps, point)) {  
828 - sleepStr = "\t" + String.valueOf((int)dsleepStrt);  
829 - break;  
830 - }  
831 - }  
832 - }  
833 - if(sleepStr.equals(""))  
834 - sleepStr = "\t" + "60";  
835 - xh++;  
836 - restStr = restStr + lng + lat + stationMake + stationNo + stationCode + staitondistance + sleepStr + stationName + enterStr;  
837 - }  
838 - }  
839 - }  
840 - System.out.println(restStr);  
841 - return restStr;  
842 - }  
843 -  
844 - public boolean isPointOnPolyline (Map<String, Object> point, List<Map<String, Object>> listMap ){  
845 -  
846 - boolean success = false;  
847 -  
848 - for(int l = 0; l < listMap.size() - 1; l ++){  
849 -  
850 - Map<String, Object> tempM = listMap.get(l);  
851 -  
852 - Map<String, Object> nextTempM = listMap.get(l+1);  
853 -  
854 - if (Double.valueOf(point.get("lng").toString())>= Math.min(Double.valueOf(tempM.get("lng").toString()), Double.valueOf(nextTempM.get("lng").toString())) && Double.valueOf(point.get("lng").toString()) <= Math.max(Double.valueOf(tempM.get("lng").toString()), Double.valueOf(nextTempM.get("lng").toString())) &&  
855 - Double.valueOf(point.get("lat").toString()) >= Math.min(Double.valueOf(tempM.get("lat").toString()), Double.valueOf(nextTempM.get("lat").toString())) && Double.valueOf(point.get("lat").toString()) <= Math.max(Double.valueOf(tempM.get("lat").toString()), Double.valueOf(nextTempM.get("lat").toString()))){  
856 -  
857 -  
858 - double precision = (Double.valueOf(tempM.get("lng").toString()) - Double.valueOf(point.get("lng").toString())) * (Double.valueOf(nextTempM.get("lat").toString()) - Double.valueOf(point.get("lat").toString())) -  
859 - (Double.valueOf(nextTempM.get("lng").toString()) - Double.valueOf(tempM.get("lng").toString())) * (Double.valueOf(tempM.get("lat").toString()) - Double.valueOf(nextTempM.get("lat").toString()));  
860 -  
861 - if(precision < 2e-10 && precision > -2e-10){  
862 -  
863 - //实质判断是否接近0  
864 - success = true;  
865 -  
866 - }  
867 -  
868 - }  
869 -  
870 - }  
871 -  
872 - return success;  
873 - }  
874 -  
875 - /**  
876 - * @Description:TOOD(获取FTP登录参数) 这里暂时只做一个map值返回,以后可以作为ftp登录类提出来  
877 - *  
878 - * @return : Map<String, Object> <url:IP;port:端口;username:用户名;password:密码;remotePath:相对路径>  
879 - */  
880 - public Map<String, Object> readPropertiesGetFTPParam(){  
881 -  
882 - // 返回值map  
883 - Map<String, Object> resultMap = new HashMap<String, Object>();  
884 -  
885 - Properties env = new Properties();  
886 -  
887 - try {  
888 -  
889 - env.load(DBUtils_MS.class.getClassLoader().getResourceAsStream("ftp.properties"));  
890 -  
891 - resultMap.put("url", env.getProperty("ftp.url"));  
892 -  
893 - resultMap.put("port", env.getProperty("ftp.port"));  
894 -  
895 - resultMap.put("username", env.getProperty("ftp.username"));  
896 -  
897 - resultMap.put("password", env.getProperty("ftp.password"));  
898 -  
899 - resultMap.put("remotePath", env.getProperty("ftp.path"));  
900 -  
901 - } catch (Exception e) {  
902 -  
903 - e.printStackTrace();  
904 -  
905 - }  
906 -  
907 - return resultMap ;  
908 - }  
909 -  
910 - @Override  
911 - public Map<String, Object> findByMultiLine(String lineIds) {  
912 - Map<String, Object> rs = new HashMap<>();  
913 - try{  
914 - List<String> idx = Splitter.on(',').splitToList(lineIds);  
915 - //路由  
916 - List<StationRoute> list = new ArrayList<>();  
917 -  
918 -  
919 - /**  
920 - * in 查询符 无法和 @EntityGraph 同时配合使用,这可能是一个bug  
921 - * 暂时只能循环单线路查询  
922 - */  
923 - //stationRouteRepository.multiLine(idx)  
924 - for(String id : idx){  
925 - list.addAll(stationRouteRepository.findByLineCode(id));  
926 - }  
927 -  
928 - for(StationRoute sr : list){  
929 - sr.setLine(null);  
930 - }  
931 - //过滤部分字段  
932 - /*String jsonStr = JSON.toJSONString(list, new PropertyFilter() {  
933 -  
934 - @Override  
935 - public boolean apply(Object object, String name, Object value) {  
936 - if(name.equals("line"))  
937 - return false;  
938 - return true;  
939 - }  
940 - });*/  
941 -  
942 - rs.put("status", ResponseCode.SUCCESS);  
943 - rs.put("list", list);  
944 - }catch(Exception e){  
945 - logger.error("", e);  
946 - rs.put("status", ResponseCode.ERROR);  
947 - }  
948 -  
949 - return rs;  
950 - }  
951 -  
952 - public void matchCode(List<StationRoute> stationRoutes,List<StationMatchData> stationMatchData, List<StationRoute> listMactah){  
953 - int listsSize = stationRoutes.size();  
954 - if(listsSize > 0 && stationMatchData.size() > 0){  
955 - if(stationMatchData.size() == listsSize){  
956 - for (int i=0; i<listsSize; i++) {  
957 - if(!StringUtils.isEmpty(stationMatchData.get(i).getStationStandardCode())){  
958 - stationRoutes.get(i).setIndustryCode(stationMatchData.get(i).getStationStandardCode());  
959 - listMactah.add(stationRoutes.get(i));  
960 - }  
961 - }  
962 - } else {  
963 - Map<String,String> smdMap = new HashMap<>();  
964 - for (int i=0; i<listsSize; i++) {  
965 -  
966 - String name = stationRoutes.get(i).getStationName();  
967 - String names[] = null;  
968 - if(name.indexOf("(") != -1){  
969 - names = name.split("(");  
970 - } else if(name.indexOf("(") != -1){  
971 - names = name.split("\\(");  
972 - }  
973 -  
974 - for (StationMatchData smd:stationMatchData) {  
975 - smdMap.put(smd.getStationName(),smd.getStationStandardCode());  
976 - String stationName =smd.getStationName();  
977 - String stationName2 =smd.getStationName2();  
978 - String industryCode =smd.getStationStandardCode();  
979 - if(StringUtils.isEmpty(industryCode)){  
980 - continue;  
981 - }  
982 - if(names != null && names.length > 1){  
983 -// if(stationRoutes.get(i).getStationMark().equals(smd.getStationType()) && (stationName.indexOf(names[0]) != -1 || stationName.indexOf(names[1].substring(0,names[1].length()-1)) != -1 || stationName2.indexOf(names[0]) != -1 || stationName2.indexOf(names[1].substring(0,names[1].length()-1)) != -1)){  
984 - if((stationName.indexOf(names[0]) != -1 || stationName.indexOf(names[1].substring(0,names[1].length()-1)) != -1 || stationName2.indexOf(names[0]) != -1 || stationName2.indexOf(names[1].substring(0,names[1].length()-1)) != -1)){  
985 - stationRoutes.get(i).setIndustryCode(industryCode);  
986 - listMactah.add(stationRoutes.get(i));  
987 - break;  
988 - }  
989 - }else {  
990 -// if(stationRoutes.get(i).getStationMark().equals(smd.getStationType()) && (stationName.indexOf(name) != -1 || stationName2.indexOf(name) != -1)){  
991 - if(stationName.indexOf(name) != -1 || stationName2.indexOf(name) != -1){  
992 -// if(stationRoutes.get(i).getStationMark().equals(smd.getStationType()) && (name.equals(stationName) || name.equals(stationName2))){  
993 -  
994 - stationRoutes.get(i).setIndustryCode(industryCode);  
995 - listMactah.add(stationRoutes.get(i));  
996 - break;  
997 - }  
998 - }  
999 - }  
1000 - }  
1001 - }  
1002 - }  
1003 - }  
1004 -} 1 +package com.bsth.service.impl;
  2 +
  3 +import com.bsth.common.ResponseCode;
  4 +import com.bsth.entity.*;
  5 +import com.bsth.entity.search.CustomerSpecs;
  6 +import com.bsth.repository.*;
  7 +import com.bsth.service.StationRouteService;
  8 +import com.bsth.util.*;
  9 +import com.bsth.util.Geo.GeoUtils;
  10 +import com.bsth.util.Geo.Point;
  11 +import com.bsth.util.PackTarGZUtils;
  12 +import com.bsth.util.db.DBUtils_MS;
  13 +import com.google.common.base.Splitter;
  14 +import org.apache.commons.lang3.StringUtils;
  15 +import org.geolatte.geom.Polygon;
  16 +import org.springframework.beans.factory.annotation.Autowired;
  17 +import org.springframework.beans.factory.annotation.Value;
  18 +import org.springframework.data.domain.Sort;
  19 +import org.springframework.data.domain.Sort.Direction;
  20 +import org.springframework.stereotype.Service;
  21 +
  22 +import javax.servlet.http.HttpServletResponse;
  23 +import java.io.*;
  24 +import java.text.DecimalFormat;
  25 +import java.util.*;
  26 +import java.util.zip.ZipEntry;
  27 +import java.util.zip.ZipOutputStream;
  28 +
  29 +/**
  30 + *
  31 + * @ClassName: StationRouteServiceImpl(站点路由service业务层实现类)
  32 + *
  33 + * @Extends : BaseService
  34 + *
  35 + * @Description: TODO(站点路由service业务层)
  36 + *
  37 + * @Author bsth@lq
  38 + *
  39 + * @Date 2016年5月03日 上午9:21:17
  40 + *
  41 + * @Version 公交调度系统BS版 0.1
  42 + *
  43 + */
  44 +
  45 +@Service
  46 +public class StationRouteServiceImpl extends BaseServiceImpl<StationRoute, Integer> implements StationRouteService {
  47 +
  48 + @Value("${path.speech.common}")
  49 + private String commonPath;
  50 +
  51 + @Value("${path.speech.line}")
  52 + private String linePathPattern;
  53 +
  54 + @Autowired
  55 + private StationRouteRepository stationRouteRepository;
  56 +
  57 + @Autowired
  58 + private SectionRouteRepository sectionRouteRepository;
  59 +
  60 + @Autowired
  61 + private LineRepository lineRepository;
  62 +
  63 + @Autowired
  64 + private StationRepository stationRepository;
  65 +
  66 + @Autowired
  67 + private BusinessRepository businessRepository;
  68 +
  69 + @Autowired
  70 + private LsStationRouteRepository lsStationRouteRepository;
  71 +
  72 + @Autowired
  73 + private LsSectionRouteRepository lsSectionRouteRepository;
  74 +
  75 + @Override
  76 + public Iterable<StationRoute> list(Map<String, Object> map) {
  77 + List<Sort.Order> orders = new ArrayList<>();
  78 + orders.add(new Sort.Order(Direction.ASC, "directions"));
  79 + orders.add(new Sort.Order(Direction.ASC, "stationRouteCode"));
  80 +
  81 + return stationRouteRepository.findAll(new CustomerSpecs<>(map), Sort.by(orders));
  82 + }
  83 +
  84 + @Override
  85 + public Map<String, Object> getSectionRouteExport(Integer id, HttpServletResponse resp) {
  86 + Map<String, Object> resultMap = new HashMap<String, Object>();
  87 + try {
  88 + // List<Map<String, Object>> resultList = new ArrayList<Map<String,Object>>();
  89 + Map<String,Object> resultExcel = new HashMap<String,Object>();//导出参数的对象
  90 + /* 添加表头*/
  91 + List<String> title = new ArrayList<String>();
  92 + title.add("线路ID");
  93 + title.add("方向");
  94 + title.add("站点编码");
  95 + title.add("站点顺序号");
  96 + title.add("站点备注");
  97 + title.add("站点名称");
  98 + title.add("站点距离(km)");
  99 + title.add("站点时长(min)");
  100 + title.add("线路名称");
  101 + resultExcel.put("title", title);
  102 + /* 添加表单*/
  103 + Map<String,List<String>> temp = new HashMap<String,List<String>>();
  104 + List<StationRoute> strtionList = stationRouteRepository.findStationExport(id);
  105 + if(strtionList == null){
  106 + logger.info("没有数据导,出用户信息失败!");
  107 + } else {
  108 +
  109 + for (int i = 0; i < strtionList.size(); i++) {
  110 + StationRoute station = strtionList.get(i);
  111 +
  112 + List<String> varList = new ArrayList<String>();
  113 + varList.add(station.getLine().getId().toString());
  114 + varList.add(station.getDirections().toString());
  115 + varList.add(station.getStationCode());
  116 + varList.add(station.getStationRouteCode().toString());
  117 + varList.add(station.getStationMark());
  118 + varList.add(station.getStationName());
  119 + varList.add(station.getDistances().toString());
  120 + varList.add(station.getToTime().toString());
  121 + varList.add(station.getLine().getName());
  122 + temp.put((i+1)+"", varList);
  123 + }
  124 + }
  125 + resultExcel.put("content", temp);
  126 + ExcelUtil excelUtil = new ExcelUtil();
  127 + excelUtil.buildExcelDocument(resultExcel, strtionList.get(0).getLine().getName()+"线路站点",resp);
  128 + resultMap.put("status", ResponseCode.SUCCESS);
  129 + } catch (Exception e) {
  130 + resultMap.put("status", ResponseCode.ERROR);
  131 + logger.error("save erro.", e);
  132 + }
  133 + return resultMap;
  134 + }
  135 +
  136 + /**
  137 + * @Description :TODO(查询树站点与路段数据)
  138 + *
  139 + * @param map <line.id_eq:线路ID; directions_eq:方向>
  140 + *
  141 + * @return List<Map<String, Object>>
  142 + */
  143 + @Override
  144 + public Map<String, Object> findRoutes(Map<String, Object> map) {
  145 + Map<String, Object> result = new HashMap<>();
  146 + List<StationRoute> stationList = stationRouteRepository.findAll(new CustomerSpecs<>(map), Sort.by(Direction.ASC, "directions", "stationRouteCode"));
  147 + List<SectionRoute> sectionList = sectionRouteRepository.findAll(new CustomerSpecs<>(map), Sort.by(Direction.ASC, "directions", "sectionrouteCode"));
  148 +
  149 + result.put("stationRoutes", stationList);
  150 + result.put("sectionRoutes", sectionList);
  151 +
  152 + return result;
  153 + }
  154 +
  155 + @Override
  156 + public Map<String, Object> systemQuote(Map<String, Object> map) {
  157 + Map<String, Object> resultmap = new HashMap<>();
  158 + try{
  159 +
  160 + StationRoute route = new StationRoute();
  161 +
  162 + Integer lineId = map.get("lineId").equals("") ? null : Integer.parseInt(map.get("lineId").toString());
  163 +
  164 + Integer stationId = map.get("stationId").equals("") ? null : Integer.parseInt(map.get("stationId").toString());
  165 +
  166 + Line line = lineRepository.findById(lineId).get();
  167 +
  168 + Station station = stationRepository.findById(stationId).get();
  169 +
  170 + route.setLine(line);
  171 +
  172 + route.setStation(station);
  173 +
  174 + //baseRepository.save(t);
  175 + resultmap.put("status", ResponseCode.SUCCESS);
  176 + }catch(Exception e){
  177 + resultmap.put("status", ResponseCode.ERROR);
  178 + logger.error("save erro.", e);
  179 + }
  180 + return resultmap;
  181 + }
  182 +
  183 + /**
  184 + * @Description :TODO(查询线路某方向下的站点序号与类型)
  185 + *
  186 + * @param map <lineId:线路ID; direction:方向;stationRouteCode:站点编码>
  187 + *
  188 + * @return List<Map<String, Object>>
  189 + */
  190 + @Override
  191 + public List<Map<String, Object>> findUpStationRouteCode(Map<String, Object> map) {
  192 + Integer lineId = map.get("lineId").equals("") ? null : Integer.parseInt(map.get("lineId").toString());
  193 + Integer direction = map.get("direction").equals("") ? null : Integer.parseInt(map.get("direction").toString());
  194 + Integer stationRouteCode = map.get("stationRouteCode").equals("") ? null : Integer.parseInt(map.get("stationRouteCode").toString());
  195 + List<Object[]> reslutList = stationRouteRepository.findUpStationRouteCode(lineId, direction, stationRouteCode);
  196 + List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
  197 + if(reslutList.size()>0) {
  198 + for(int i = 0 ; i <reslutList.size() ;i++){
  199 + Map<String, Object> tempM = new HashMap<String, Object>();
  200 + tempM.put("stationRouteCode", reslutList.get(i)[0]);
  201 + tempM.put("stationRouteMarke", reslutList.get(i)[1]);
  202 + list.add(tempM);
  203 + }
  204 + }
  205 + return list;
  206 + }
  207 +
  208 + private void traversalStation(List<LsStationRoute> stationRoutes, List<Map<String, Object>> resultList, int len) {
  209 + for(int i = 0 ; i < len; i++) {
  210 + LsStationRoute stationRoute = stationRoutes.get(i);
  211 + Map<String, Object> tempM = new HashMap<String,Object>();
  212 +
  213 + tempM.put("stationRouteLine", stationRoute.getLine().getId());
  214 +
  215 + tempM.put("stationRouteStation", stationRoute.getStation().getId());
  216 +
  217 + tempM.put("stationRouteCode", stationRoute.getStationRouteCode());
  218 +
  219 + tempM.put("stationRouteLIneCode", stationRoute.getLineCode());
  220 +
  221 + tempM.put("stationRouteStationMark", stationRoute.getStationMark());
  222 +
  223 + tempM.put("stationOutStationNmber", stationRoute.getOutStationNmber());
  224 +
  225 + tempM.put("stationRoutedirections", stationRoute.getDirections());
  226 +
  227 + tempM.put("stationRouteDistances", stationRoute.getDistances());
  228 +
  229 + tempM.put("stationRouteToTime", stationRoute.getToTime());
  230 +
  231 + tempM.put("staitonRouteFirstTime", stationRoute.getFirstTime());
  232 +
  233 + tempM.put("stationRouteEndTime", stationRoute.getEndTime());
  234 +
  235 + tempM.put("stationRouteDescriptions", stationRoute.getDescriptions());
  236 +
  237 + tempM.put("stationRouteDestroy", stationRoute.getDestroy());
  238 +
  239 + tempM.put("stationRouteVersions", stationRoute.getVersions());
  240 +
  241 + tempM.put("stationRouteCreateBy", stationRoute.getCreateBy());
  242 +
  243 + tempM.put("stationRouteCreateDate", stationRoute.getCreateDate());
  244 +
  245 + tempM.put("stationRouteUpdateBy", stationRoute.getUpdateBy());
  246 +
  247 + tempM.put("stationRouteUpdateDate", stationRoute.getUpdateDate());
  248 +
  249 + tempM.put("stationId", stationRoute.getStation().getId());
  250 +
  251 + tempM.put("stationCode", stationRoute.getStation().getStationCode());
  252 +
  253 + tempM.put("stationRouteName", stationRoute.getStationName());
  254 +
  255 + tempM.put("stationRoadCoding", stationRoute.getStation().getRoadCoding());
  256 +
  257 + tempM.put("stationJwpoints", stationRoute.getStation().getCenterPoint().toString());
  258 +
  259 + CoordinateConverter.Location location = CoordinateConverter.LocationMake(stationRoute.getStation().getCenterPointWgs().toString());
  260 + tempM.put("stationGlonx", location.getLng());
  261 +
  262 + tempM.put("stationGlaty", location.getLat());
  263 +
  264 + Polygon polygon = stationRoute.getBufferPolygon(), polygonWgs = stationRoute.getBufferPolygonWgs();
  265 + tempM.put("stationBPolyonGrid", polygon == null ? "" : polygon.toString());
  266 +
  267 + tempM.put("stationGPloyonGrid", polygonWgs == null ? "" : polygonWgs.toString());
  268 +
  269 + tempM.put("stationDestroy", stationRoute.getStation().getDestroy());
  270 +
  271 + tempM.put("stationRadius", stationRoute.getRadius());
  272 +
  273 + tempM.put("stationShapesType", stationRoute.getShapedType());
  274 +
  275 + tempM.put("stationVersions", stationRoute.getStation().getVersions());
  276 +
  277 + tempM.put("sttationDescriptions", stationRoute.getStation().getDescriptions());
  278 +
  279 + tempM.put("stationCreateBy", stationRoute.getStation().getCreateBy());
  280 +
  281 + tempM.put("stationCreateDate", stationRoute.getStation().getCreateDate());
  282 +
  283 + tempM.put("stationUpdateBy", stationRoute.getStation().getUpdateBy());
  284 +
  285 + tempM.put("stationUpdateDate", stationRoute.getStation().getUpdateDate());
  286 +
  287 + tempM.put("stationRouteId", stationRoute.getId());
  288 + tempM.put("zdmc", stationRoute.getStationName());
  289 + // 行业编码
  290 + tempM.put("industryCode", stationRoute.getIndustryCode());
  291 + try {
  292 + tempM.put("stationNameEn", stationRoute.getStationNameEn());
  293 + } catch (Exception e) {
  294 + e.printStackTrace();
  295 + }
  296 +
  297 + resultList.add(tempM);
  298 + }
  299 + }
  300 +
  301 + /**
  302 + * @Description :TODO(查询线路某方向下所有站点的中心百度坐标)
  303 + *
  304 + * @param map <lineId:线路ID; direction:方向>
  305 + *
  306 + * @return List<Map<String, Object>>
  307 + */
  308 + @Override
  309 + public List<Map<String, Object>> getStationRouteCenterPoints(Map<String, Object> map) {
  310 +
  311 + List<Map<String, Object>> resultList = new ArrayList<Map<String,Object>>();
  312 +
  313 + // 线路ID
  314 + Integer lineId = map.get("lineId").equals("") ? null : Integer.parseInt(map.get("lineId").toString());
  315 +
  316 + // 方向
  317 + Integer direction = map.get("direction").equals("") ? null : Integer.parseInt(map.get("direction").toString());
  318 +
  319 + List<Object[]> list = stationRouteRepository.getSelectStationRouteCenterPoints(lineId, direction);
  320 +
  321 + if(list.size()>0) {
  322 +
  323 + for(int i = 0;i<list.size();i++) {
  324 +
  325 + Map<String, Object> tempM = new HashMap<String,Object>();
  326 +
  327 + tempM.put("bJwpoints", list.get(i)[0]);
  328 +
  329 + tempM.put("stationName", list.get(i)[1]);
  330 +
  331 + resultList.add(tempM);
  332 +
  333 + }
  334 +
  335 + }
  336 +
  337 + return resultList;
  338 + }
  339 +
  340 + /**
  341 + * @Description :TODO(查询线路某方向下所有站点)
  342 + *
  343 + * @param map <lineId:线路ID; direction:方向>
  344 + *
  345 + * @return List<Map<String, Object>>
  346 + */
  347 + @Override
  348 + public List<Map<String, Object>> getStationRouteList(Map<String, Object> map) {
  349 + if (map.get("line.id_eq") == null || map.get("directions_eq") == null || map.get("versions_eq") == null) {
  350 + throw new IllegalArgumentException("需正确传入线路、方向、版本参数");
  351 + }
  352 + map.put("destroy_eq", 0);
  353 + List<LsStationRoute> stationRoutes = lsStationRouteRepository.findAll(new CustomerSpecs<>(map), Sort.by(Direction.ASC, "stationRouteCode"));
  354 +
  355 + List<Map<String, Object>> resultList = new ArrayList<>();
  356 +
  357 + int len = stationRoutes.size();
  358 +
  359 + if(len > 0) {
  360 + // 遍历站点
  361 + traversalStation(stationRoutes, resultList, len);
  362 + }
  363 + return resultList;
  364 + }
  365 +
  366 + /**
  367 + * @Description :TODO(撤销站点)
  368 + *
  369 + * @param map <lineId:线路ID; destroy:是否撤销(0:否;1:是)>
  370 + *
  371 + * @return Map<String, Object> <SUCCESS ; ERROR>
  372 + */
  373 + @Override
  374 + public Map<String, Object> stationRouteIsDestroy(Map<String, Object> map) {
  375 + Map<String, Object> resultMap = new HashMap<String,Object>();
  376 +
  377 + try {
  378 +
  379 + Integer stationRouteId = map.get("stationRouteId").equals("") ? 0 : Integer.parseInt(map.get("stationRouteId").toString());
  380 +
  381 + Integer destroy = map.get("destroy").equals("") ? 0 : Integer.parseInt(map.get("destroy").toString());
  382 +
  383 + lsStationRouteRepository.deleteById(stationRouteId);
  384 +
  385 + resultMap.put("status", ResponseCode.SUCCESS);
  386 +
  387 + } catch (Exception e) {
  388 +
  389 + resultMap.put("status", ResponseCode.ERROR);
  390 +
  391 + logger.error("save erro.", e);
  392 +
  393 + }
  394 +
  395 + return resultMap;
  396 + }
  397 +
  398 + /**
  399 + * @Description : TODO(根据线路ID生成行单)
  400 + *
  401 + * @param map <lineId:线路ID>
  402 + *
  403 + * @return Map<String, Object> <SUCCESS ; ERROR ; NOTDATA>
  404 + */
  405 + @Override
  406 + public Map<String, Object> usingSingle(Map<String, Object> map) {
  407 + // 返回值map
  408 + Map<String, Object> resultMap = new HashMap<String,Object>();
  409 + try {
  410 + // 获取线路ID
  411 + Integer lineId = map.get("lineId").equals("") ? 0 : Integer.parseInt(map.get("lineId").toString());
  412 + /** 查询线路信息 @param:<lineId:线路ID> */
  413 + Line line = lineRepository.findById(lineId).get();
  414 +
  415 +
  416 + Business company = businessRepository.findByBusinessCode(line.getCompany()).get(0);
  417 +
  418 + Integer fileVersions = lineRepository.findfileVersions(lineId);
  419 + if(fileVersions == null) {
  420 + lineRepository.addFileVersions(line.getId(), line.getLineCode());
  421 + fileVersions = 1;
  422 + } else {
  423 + fileVersions = fileVersions + 1;
  424 + lineRepository.editFileVersions(line.getId(),fileVersions);
  425 + }
  426 +// Integer fileVersions = map.get("fileVersions").equals("") ? 1 : Integer.parseInt(map.get("fileVersions").toString());// 没有输入就默认1
  427 + /** 查询线路信息下的站点路由信息 @param:<lineId:线路ID> */
  428 + List<Object[]> objects = stationRouteRepository.usingSingle(lineId);
  429 + if (objects.size()>0) {
  430 +// // 报站音频
  431 +// Set<String> languages = new HashSet<>();
  432 +// languages.add("cn");
  433 +// languages.add("sh");
  434 +// languages.add("en");
  435 +// InputStream tts = ttsAndZip(objects, line, languages);
  436 + /** 获取配置文件里的ftp登录参数 */
  437 + Map<String, Object> FTPParamMap = readPropertiesGetFTPParam();
  438 + // 压缩文件名
  439 + String odlGzFileName = line.getLineCode() + ".txt.gz";
  440 + // txt文件名
  441 + String textFileName = line.getLineCode() + ".txt";
  442 + // 创建一个ftp上传实例
  443 + FTPClientUtils clientUtils = new FTPClientUtils();
  444 + // IP
  445 + String url = FTPParamMap.get("url").toString();
  446 + // 端口
  447 + int port = Integer.valueOf(FTPParamMap.get("port").toString());
  448 + // 用户名
  449 + String username = FTPParamMap.get("username").toString();
  450 + // 密码
  451 + String password = FTPParamMap.get("password").toString();
  452 + // 相对路径
  453 + String remotePath = FTPParamMap.get("remotePath").toString();
  454 + /** 如果已存在相同行单文件名则先删除 */
  455 + clientUtils.deleteFtpFile(url, port, username, password, remotePath, odlGzFileName);
  456 + clientUtils.deleteFtpFile(url, port, username, password, remotePath, textFileName);
  457 + clientUtils.deleteFtpFile(url, port, username, password, remotePath + "/voice/", textFileName);
  458 + String textStr = "";
  459 +// boolean tempTag = ishxType(objects);
  460 + Integer linePlayType = line.getLinePlayType() == null ? -1:line.getLinePlayType();
  461 + if(linePlayType == 1)
  462 + textStr = hxTextFileToFtp(objects,lineId);// 环线行单文件内容
  463 + else if (linePlayType == 0)
  464 + textStr = newTextFileToFTP(objects,lineId);/** 双向行单文件内容 @param:<objects:站点路由;lineId:线路ID>*/
  465 + else
  466 + resultMap.put("status","NOLinePlayType");// 线路无线路规划类型
  467 +
  468 + textStr = line.getName() + " " + fileVersions + "\r\n" + textStr;
  469 + InputStream input = new ByteArrayInputStream(textStr.getBytes("gbk"));
  470 + /** 生成txt文件,上传ftp */
  471 + clientUtils.uploadFile(url, port, username, password, remotePath, textFileName, input);
  472 + // 创建打包实例
  473 + PackTarGZUtils packTarGZUtils= new PackTarGZUtils();
  474 + /** 获取txt文件 */
  475 + File textFile = clientUtils.GetFtpFile(url, port, username, password, remotePath, textFileName);
  476 + File target = new File(odlGzFileName);
  477 + // 将txt文件打包
  478 + File targetFile = PackTarGZUtils.compress(textFile, target);
  479 + clientUtils.FTPUpLoadFromDisk(targetFile, targetFile.getName(), url, port, username, password, remotePath);
  480 + // 删除文件
  481 + textFile.delete();
  482 + targetFile.delete();
  483 +
  484 +
  485 + textStr = newTextVoiceFileToFTP(objects,lineId);
  486 +
  487 + String lineName = line.getName();
  488 +
  489 + /*try {
  490 + lineName = Integer.parseInt(line.getName().replace("路", "")) + "";
  491 + } catch (Exception e) {
  492 + }*/
  493 +
  494 + String head = lineName + " " + fileVersions + " " + line.getStartStationFirstTime() + "-" + line.getStartStationEndTime() + " " + line.getEndStationFirstTime() + "-" + line.getEndStationEndTime() + " " + line.getTicketPrice() + " " + company.getBusinessName().replace("公司", "公交") + " " + (company.getPhoneNum()== null ? "-" : company.getPhoneNum());
  495 +
  496 + textStr = head +"\r\n" + textStr;
  497 +
  498 + input = new ByteArrayInputStream(textStr.getBytes("gbk"));
  499 +
  500 + clientUtils.uploadFile(url, port, username, password, remotePath + "/voice/", textFileName, input);
  501 +
  502 +// textFile.delete();
  503 +
  504 +// clientUtils.deleteFtpFile(url, port, username, password, remotePath + "/voice/", String.format("%s.zip", line.getLineCode()));
  505 +// clientUtils.uploadFile(url, port, username, password, remotePath + "/voice/", String.format("%s.zip", line.getLineCode()), tts);
  506 +
  507 + resultMap.put("status", ResponseCode.SUCCESS);
  508 + }else {
  509 + resultMap.put("status","NOTDATA");
  510 + }
  511 + } catch (Exception e) {
  512 + resultMap.put("status", ResponseCode.ERROR);
  513 + logger.error("save erro.", e);
  514 + } finally {
  515 + return resultMap;
  516 + }
  517 + }
  518 +
  519 + /**
  520 + * @Description : TODO(形成行单文件内容)
  521 + *
  522 + * @param objects :站点路由信息
  523 + *
  524 + * {[0]:g_lonx(GPS经度);[1]:g_laty(GPS纬度);[2]:b_jwpoints(百度经纬度坐标)
  525 + *
  526 + * [3]:station_mark(站点类型);[4]:station_route_code(站点序号);[5]:station_cod(站点编码);
  527 + *
  528 + * [6]:distances(站点距离);[7]:station_name(站点名称);[8]:directions(方向)}
  529 + *
  530 + * @param lineId :线路ID
  531 + *
  532 + * @return String
  533 + */
  534 + public String newTextFileToFTP(List<Object[]> objects,Integer lineId) {
  535 +
  536 + // 返回值String
  537 + String stationRStr = "";
  538 + // windows下的文本文件换行符
  539 + //String enterStr = "\r\n";
  540 + // linux/unix下的文本文件换行符
  541 + String enterStr = "\r";
  542 + int defaultZdxh = 0;
  543 + if(objects.size()>0) {
  544 + for(int i = 0; i<objects.size();i++) {
  545 + defaultZdxh ++ ;
  546 + // 经度
  547 + String lng = objects.get(i)[0].equals("") ? "0" : objects.get(i)[0].toString();
  548 +
  549 + // 纬度
  550 + String lat = objects.get(i)[1].equals("") ? "0" : objects.get(i)[1].toString();
  551 +
  552 + Point point = new Point(Double.valueOf(lng), Double.valueOf(lat));
  553 +
  554 + lat = "\t" + lat;
  555 +
  556 + // 站点类型
  557 + String stationMakeStr = objects.get(i)[3].equals("") ? "" : objects.get(i)[3].toString();
  558 +
  559 + String stationMake = "";
  560 +
  561 + if(stationMakeStr.equals("E")) {
  562 + stationMake = "\t2";
  563 + }else {
  564 + stationMake ="\t1";
  565 + }
  566 +
  567 + // 站点序号
  568 + // String stationNo = objects.get(i)[4].equals("") ? "" : objects.get(i)[4].toString();
  569 + String stationNo = String.valueOf(defaultZdxh);
  570 +
  571 + stationNo = "\t" + stationNo;
  572 +
  573 + // 站点编码
  574 + String stationCode = objects.get(i)[5].equals("") ? "" : objects.get(i)[5].toString();
  575 +
  576 + int len = stationCode.length();
  577 + if(len<8) {
  578 + int dx = 8 - len;
  579 + String addStr = "";
  580 + for(int p =0;p<dx;p++) {
  581 + addStr = addStr + "0";
  582 + }
  583 + stationCode = addStr + stationCode;
  584 + }else if(len>8){
  585 + stationCode = stationCode.substring(8);
  586 + }
  587 +
  588 + stationCode = "\t" +stationCode;
  589 +
  590 + double dis = objects.get(i)[6]==null ? 0.0 : Double.parseDouble(objects.get(i)[6].toString())*1000;
  591 +
  592 + String tempDistc = String.valueOf((int) dis);
  593 +
  594 + // 站点距离
  595 + String staitondistance = "\t" + tempDistc;
  596 +
  597 + // 站点名称
  598 + String stationName = objects.get(i)[7].equals("") ? "" : objects.get(i)[7].toString();
  599 +
  600 + stationName = "\t" +stationName;
  601 +
  602 + // 限速
  603 + // String sleepStr = " " + "60";
  604 +
  605 + // 限速
  606 + String sleepStr = "";
  607 + // 方向
  608 + int directions = objects.get(i)[8]==null ? null : Integer.valueOf(objects.get(i)[8].toString());
  609 + /** 获取路段路由信息 @pararm:<lineId:线路ID;directions:方向> */
  610 + List<Object[]> sobje = sectionRouteRepository.sectionRouteVector(lineId,directions);
  611 + if(sobje.size()==1) {
  612 + double dsleepStrt = sobje.get(0)[2] == null ? 60d : Double.valueOf(sobje.get(0)[2].toString());
  613 + sleepStr = "\t" + new DecimalFormat("0").format(dsleepStrt);
  614 +// int dsleepStr = sobje.get(0)[2] == null || sobje.get(0)[2].equals("") ? 60 : Integer.valueOf(sobje.get(0)[2].toString());
  615 +// sleepStr = "\t" + String.valueOf(dsleepStr);
  616 + }else if(sobje.size()>1){
  617 + for(int j =0;j<sobje.size();j++) {
  618 + double dsleepStrt = sobje.get(j)[2] == null || sobje.get(j)[2].equals("") ? 60d : Double.valueOf(sobje.get(j)[2].toString());
  619 + String pointsStr = sobje.get(j)[1]==null || sobje.get(j)[1].equals("") ? null : sobje.get(j)[1].toString();
  620 + pointsStr = pointsStr.substring(11, pointsStr.length()-1);
  621 + List<Point> ps = new ArrayList<>();
  622 + String[] pArray = pointsStr.split(",");
  623 + for(int a = 0; a <pArray.length; a++) {
  624 + String[] tmepA = pArray[a].split(" ");
  625 + Point temp = new Point(Double.valueOf(tmepA[0]), Double.valueOf(tmepA[1]));
  626 + ps.add(temp);
  627 + }
  628 + if(GeoUtils.isInSection(ps, point)) {
  629 + sleepStr = "\t" + String.valueOf((int)dsleepStrt);
  630 + break;
  631 + }
  632 + }
  633 + }
  634 + if(sleepStr.equals(""))
  635 + sleepStr = "\t" + "60";
  636 + stationRStr = stationRStr + lng + lat + stationMake + stationNo + stationCode + staitondistance + sleepStr + stationName + enterStr;
  637 + }
  638 +
  639 + }
  640 + return stationRStr;
  641 +
  642 + }
  643 +
  644 + public String newTextVoiceFileToFTP(List<Object[]> objects,Integer lineId) {
  645 +
  646 + // 返回值String
  647 + String stationRStr = "";
  648 + // windows下的文本文件换行符
  649 + String enterStr = "\r\n";
  650 + // linux/unix下的文本文件换行符
  651 +// String enterStr = "\r";
  652 + int defaultZdxh = 0;
  653 + if(objects.size()>0) {
  654 + for(int i = 0; i<objects.size();i++) {
  655 + defaultZdxh ++ ;
  656 + // 经度
  657 + String lng = objects.get(i)[0].equals("") ? "0" : objects.get(i)[0].toString();
  658 +
  659 + // 纬度
  660 + String lat = objects.get(i)[1].equals("") ? "0" : objects.get(i)[1].toString();
  661 +
  662 + Point point = new Point(Double.valueOf(lng), Double.valueOf(lat));
  663 +
  664 + lat = "\t" + lat;
  665 +
  666 + // 站点类型
  667 + String stationMakeStr = objects.get(i)[3].equals("") ? "" : objects.get(i)[3].toString();
  668 +
  669 + String stationMake = "";
  670 +
  671 + if(stationMakeStr.equals("E")) {
  672 + stationMake = "\t2";
  673 + }else {
  674 + stationMake ="\t1";
  675 + }
  676 +
  677 + // 站点序号
  678 + // String stationNo = objects.get(i)[4].equals("") ? "" : objects.get(i)[4].toString();
  679 + String stationNo = String.valueOf(defaultZdxh);
  680 +
  681 + stationNo = "\t" + stationNo;
  682 +
  683 + // 站点编码
  684 + String stationCode = objects.get(i)[5].equals("") ? "" : objects.get(i)[5].toString();
  685 +
  686 + int len = stationCode.length();
  687 + if(len<8) {
  688 + int dx = 8 - len;
  689 + String addStr = "";
  690 + for(int p =0;p<dx;p++) {
  691 + addStr = addStr + "0";
  692 + }
  693 + stationCode = addStr + stationCode;
  694 + }else if(len>8){
  695 + stationCode = stationCode.substring(8);
  696 + }
  697 +
  698 + stationCode = "\t" +stationCode;
  699 +
  700 + double dis = objects.get(i)[6]==null ? 0.0 : Double.parseDouble(objects.get(i)[6].toString())*1000;
  701 +
  702 + String tempDistc = String.valueOf((int) dis);
  703 +
  704 + // 站点距离
  705 + String staitondistance = "\t" + tempDistc;
  706 +
  707 + // 站点名称
  708 + String stationName = objects.get(i)[7].equals("") ? " " : objects.get(i)[7].toString();
  709 +
  710 + String stationNameEn = " ";
  711 + if(objects.get(i)[9] != null){
  712 + stationNameEn = objects.get(i)[9].equals("") ? " " : objects.get(i)[9].toString();
  713 + }
  714 +
  715 +
  716 + stationName = "\t" +stationName;
  717 + stationNameEn = "\t" +stationNameEn;
  718 +
  719 + // 限速
  720 + // String sleepStr = " " + "60";
  721 +
  722 + // 限速
  723 + String sleepStr = "";
  724 + // 方向
  725 + int directions = objects.get(i)[8]==null ? null : Integer.valueOf(objects.get(i)[8].toString());
  726 + if (directions == 1) {
  727 + stationName = stationName.replaceAll("\\(起点站\\)", "").replaceAll("\\(终点站\\)", "").replaceAll("(起点站)", "").replaceAll("(终点站)", "");
  728 + }
  729 + /** 获取路段路由信息 @pararm:<lineId:线路ID;directions:方向> */
  730 + List<Object[]> sobje = sectionRouteRepository.sectionRouteVector(lineId,directions);
  731 + if(sobje.size()==1) {
  732 + double dsleepStrt = sobje.get(0)[2] == null ? 60d : Double.valueOf(sobje.get(0)[2].toString());
  733 + sleepStr = "\t" + new DecimalFormat("0").format(dsleepStrt);
  734 +// int dsleepStr = sobje.get(0)[2] == null || sobje.get(0)[2].equals("") ? 60 : Integer.valueOf(sobje.get(0)[2].toString());
  735 +// sleepStr = "\t" + String.valueOf(dsleepStr);
  736 + }else if(sobje.size()>1){
  737 + for(int j =0;j<sobje.size();j++) {
  738 + double dsleepStrt = sobje.get(j)[2] == null || sobje.get(j)[2].equals("") ? 60d : Double.valueOf(sobje.get(j)[2].toString());
  739 + String pointsStr = sobje.get(j)[1]==null || sobje.get(j)[1].equals("") ? null : sobje.get(j)[1].toString();
  740 + pointsStr = pointsStr.substring(11, pointsStr.length()-1);
  741 + List<Point> ps = new ArrayList<>();
  742 + String[] pArray = pointsStr.split(",");
  743 + for(int a = 0; a <pArray.length; a++) {
  744 + String[] tmepA = pArray[a].split(" ");
  745 + Point temp = new Point(Double.valueOf(tmepA[0]), Double.valueOf(tmepA[1]));
  746 + ps.add(temp);
  747 + }
  748 + if(GeoUtils.isInSection(ps, point)) {
  749 + sleepStr = "\t" + String.valueOf((int)dsleepStrt);
  750 + break;
  751 + }
  752 + }
  753 + }
  754 + if(sleepStr.equals(""))
  755 + sleepStr = "\t" + "60";
  756 + stationRStr = stationRStr + lng + lat + stationMake + stationNo + stationCode + staitondistance + sleepStr + stationName + stationNameEn + enterStr;
  757 + }
  758 +
  759 + }
  760 + return stationRStr;
  761 +
  762 + }
  763 +
  764 + public String hxTextFileToFtp(List<Object[]> objects,Integer lineId) {
  765 + String restStr = "";
  766 + // windows下的文本文件换行符
  767 + //String enterStr = "\r\n";
  768 + // linux/unix下的文本文件换行符
  769 + String enterStr = "\r";
  770 + int xh = 1 ;
  771 + for(int x =0;x<2;x++) {
  772 + for(int i = 0; i<objects.size();i++) {
  773 + if(Integer.valueOf(objects.get(i)[8].toString())==0) {
  774 + // 经度
  775 + String lng = objects.get(i)[0].equals("") ? "0" : objects.get(i)[0].toString();
  776 +
  777 + // 纬度
  778 + String lat = objects.get(i)[1].equals("") ? "0" : objects.get(i)[1].toString();
  779 +
  780 + Point point = new Point(Double.valueOf(lng), Double.valueOf(lat));
  781 + lat = "\t" + lat;
  782 + // 站点类型
  783 + String stationMakeStr = objects.get(i)[3].equals("") ? "" : objects.get(i)[3].toString();
  784 + String stationMake = "";
  785 + if(stationMakeStr.equals("E")) {
  786 + stationMake = "\t2";
  787 + }else {
  788 + stationMake ="\t1";
  789 + }
  790 + // 站点序号
  791 + // String stationNo = objects.get(i)[4].equals("") ? "" : objects.get(i)[4].toString();
  792 + String stationNo = "\t" + xh;
  793 + // 站点编码
  794 + String stationCode = objects.get(i)[5].equals("") ? "" : objects.get(i)[5].toString();
  795 + int len = stationCode.length();
  796 + if(len<8) {
  797 + int dx = 8 - len;
  798 + String addStr = "";
  799 + for(int p =0;p<dx;p++) {
  800 + addStr = addStr + "0";
  801 + }
  802 + stationCode = addStr + stationCode;
  803 + }else if(len>8){
  804 + stationCode = stationCode.substring(8);
  805 + }
  806 + stationCode = "\t" +stationCode;
  807 + double dis = objects.get(i)[6]==null ? 0.0 : Double.parseDouble(objects.get(i)[6].toString())*1000;
  808 + String tempDistc = String.valueOf((int) dis);
  809 + // 站点距离
  810 + String staitondistance = "\t" + tempDistc;
  811 + // 站点名称
  812 + String stationName = objects.get(i)[7].equals("") ? "" : objects.get(i)[7].toString();
  813 + stationName = "\t" +stationName;
  814 + // 限速
  815 + String sleepStr = "";
  816 + // 方向
  817 + int directions = objects.get(i)[8]==null ? null : Integer.valueOf(objects.get(i)[8].toString());
  818 + if (directions == 1) {
  819 + stationName = stationName.replaceAll("\\(起点站\\)", "").replaceAll("\\(终点站\\)", "").replaceAll("(起点站)", "").replaceAll("(终点站)", "");
  820 + }
  821 + /** 获取路段路由信息 @pararm:<lineId:线路ID;directions:方向> */
  822 + List<Object[]> sobje = sectionRouteRepository.sectionRouteVector(lineId,directions);
  823 + if(sobje.size()==1) {
  824 +// int dsleepStr = sobje.get(0)[2] == null || sobje.get(0)[2].equals("") ? 60 : Integer.valueOf(sobje.get(0)[2].toString());
  825 +// sleepStr = "\t" + String.valueOf(dsleepStr);
  826 + double dsleepStrt = sobje.get(0)[2] == null ? 60d : Double.valueOf(sobje.get(0)[2].toString());
  827 + sleepStr = "\t" + new DecimalFormat("0").format(dsleepStrt);
  828 + }else if(sobje.size()>1){
  829 + for(int j =0;j<sobje.size();j++) {
  830 + double dsleepStrt = sobje.get(j)[2] == null || sobje.get(j)[2].equals("") ? 60d : Double.valueOf(sobje.get(j)[2].toString());
  831 + String pointsStr = sobje.get(j)[1]==null || sobje.get(j)[1].equals("") ? null : sobje.get(j)[1].toString();
  832 + pointsStr = pointsStr.substring(11, pointsStr.length()-1);
  833 + List<Point> ps = new ArrayList<>();
  834 + String[] pArray = pointsStr.split(",");
  835 + for(int a = 0; a <pArray.length; a++) {
  836 + String[] tmepA = pArray[a].split(" ");
  837 + Point temp = new Point(Double.valueOf(tmepA[0]), Double.valueOf(tmepA[1]));
  838 + ps.add(temp);
  839 + }
  840 + if(GeoUtils.isInSection(ps, point)) {
  841 + sleepStr = "\t" + String.valueOf((int)dsleepStrt);
  842 + break;
  843 + }
  844 + }
  845 + }
  846 + if(sleepStr.equals(""))
  847 + sleepStr = "\t" + "60";
  848 + xh++;
  849 + restStr = restStr + lng + lat + stationMake + stationNo + stationCode + staitondistance + sleepStr + stationName + enterStr;
  850 + }
  851 + }
  852 + }
  853 + System.out.println(restStr);
  854 + return restStr;
  855 + }
  856 +
  857 + public boolean isPointOnPolyline (Map<String, Object> point, List<Map<String, Object>> listMap ){
  858 +
  859 + boolean success = false;
  860 +
  861 + for(int l = 0; l < listMap.size() - 1; l ++){
  862 +
  863 + Map<String, Object> tempM = listMap.get(l);
  864 +
  865 + Map<String, Object> nextTempM = listMap.get(l+1);
  866 +
  867 + if (Double.valueOf(point.get("lng").toString())>= Math.min(Double.valueOf(tempM.get("lng").toString()), Double.valueOf(nextTempM.get("lng").toString())) && Double.valueOf(point.get("lng").toString()) <= Math.max(Double.valueOf(tempM.get("lng").toString()), Double.valueOf(nextTempM.get("lng").toString())) &&
  868 + Double.valueOf(point.get("lat").toString()) >= Math.min(Double.valueOf(tempM.get("lat").toString()), Double.valueOf(nextTempM.get("lat").toString())) && Double.valueOf(point.get("lat").toString()) <= Math.max(Double.valueOf(tempM.get("lat").toString()), Double.valueOf(nextTempM.get("lat").toString()))){
  869 +
  870 +
  871 + double precision = (Double.valueOf(tempM.get("lng").toString()) - Double.valueOf(point.get("lng").toString())) * (Double.valueOf(nextTempM.get("lat").toString()) - Double.valueOf(point.get("lat").toString())) -
  872 + (Double.valueOf(nextTempM.get("lng").toString()) - Double.valueOf(tempM.get("lng").toString())) * (Double.valueOf(tempM.get("lat").toString()) - Double.valueOf(nextTempM.get("lat").toString()));
  873 +
  874 + if(precision < 2e-10 && precision > -2e-10){
  875 +
  876 + //实质判断是否接近0
  877 + success = true;
  878 +
  879 + }
  880 +
  881 + }
  882 +
  883 + }
  884 +
  885 + return success;
  886 + }
  887 +
  888 + /**
  889 + * @Description:TOOD(获取FTP登录参数) 这里暂时只做一个map值返回,以后可以作为ftp登录类提出来
  890 + *
  891 + * @return : Map<String, Object> <url:IP;port:端口;username:用户名;password:密码;remotePath:相对路径>
  892 + */
  893 + public Map<String, Object> readPropertiesGetFTPParam(){
  894 +
  895 + // 返回值map
  896 + Map<String, Object> resultMap = new HashMap<String, Object>();
  897 +
  898 + Properties env = new Properties();
  899 +
  900 + try {
  901 +
  902 + env.load(DBUtils_MS.class.getClassLoader().getResourceAsStream("ftp.properties"));
  903 +
  904 + resultMap.put("url", env.getProperty("ftp.url"));
  905 +
  906 + resultMap.put("port", env.getProperty("ftp.port"));
  907 +
  908 + resultMap.put("username", env.getProperty("ftp.username"));
  909 +
  910 + resultMap.put("password", env.getProperty("ftp.password"));
  911 +
  912 + resultMap.put("remotePath", env.getProperty("ftp.path"));
  913 +
  914 + } catch (Exception e) {
  915 +
  916 + e.printStackTrace();
  917 +
  918 + }
  919 +
  920 + return resultMap ;
  921 + }
  922 +
  923 + @Override
  924 + public Map<String, Object> findByMultiLine(String lineIds) {
  925 + Map<String, Object> rs = new HashMap<>();
  926 + try{
  927 + List<String> idx = Splitter.on(',').splitToList(lineIds);
  928 + //路由
  929 + List<StationRoute> list = new ArrayList<>();
  930 +
  931 +
  932 + /**
  933 + * in 查询符 无法和 @EntityGraph 同时配合使用,这可能是一个bug
  934 + * 暂时只能循环单线路查询
  935 + */
  936 + //stationRouteRepository.multiLine(idx)
  937 + for(String id : idx){
  938 + list.addAll(stationRouteRepository.findByLineCode(id));
  939 + }
  940 +
  941 + for(StationRoute sr : list){
  942 + sr.setLine(null);
  943 + }
  944 + //过滤部分字段
  945 + /*String jsonStr = JSON.toJSONString(list, new PropertyFilter() {
  946 +
  947 + @Override
  948 + public boolean apply(Object object, String name, Object value) {
  949 + if(name.equals("line"))
  950 + return false;
  951 + return true;
  952 + }
  953 + });*/
  954 +
  955 + rs.put("status", ResponseCode.SUCCESS);
  956 + rs.put("list", list);
  957 + }catch(Exception e){
  958 + logger.error("", e);
  959 + rs.put("status", ResponseCode.ERROR);
  960 + }
  961 +
  962 + return rs;
  963 + }
  964 +
  965 + public void matchCode(List<StationRoute> stationRoutes,List<StationMatchData> stationMatchData, List<StationRoute> listMactah){
  966 + int listsSize = stationRoutes.size();
  967 + if(listsSize > 0 && stationMatchData.size() > 0){
  968 + if(stationMatchData.size() == listsSize){
  969 + for (int i=0; i<listsSize; i++) {
  970 + if(!StringUtils.isEmpty(stationMatchData.get(i).getStationStandardCode())){
  971 + stationRoutes.get(i).setIndustryCode(stationMatchData.get(i).getStationStandardCode());
  972 + listMactah.add(stationRoutes.get(i));
  973 + }
  974 + }
  975 + } else {
  976 + Map<String,String> smdMap = new HashMap<>();
  977 + for (int i=0; i<listsSize; i++) {
  978 +
  979 + String name = stationRoutes.get(i).getStationName();
  980 + String names[] = null;
  981 + if(name.indexOf("(") != -1){
  982 + names = name.split("(");
  983 + } else if(name.indexOf("(") != -1){
  984 + names = name.split("\\(");
  985 + }
  986 +
  987 + for (StationMatchData smd:stationMatchData) {
  988 + smdMap.put(smd.getStationName(),smd.getStationStandardCode());
  989 + String stationName =smd.getStationName();
  990 + String stationName2 =smd.getStationName2();
  991 + String industryCode =smd.getStationStandardCode();
  992 + if(StringUtils.isEmpty(industryCode)){
  993 + continue;
  994 + }
  995 + if(names != null && names.length > 1){
  996 +// if(stationRoutes.get(i).getStationMark().equals(smd.getStationType()) && (stationName.indexOf(names[0]) != -1 || stationName.indexOf(names[1].substring(0,names[1].length()-1)) != -1 || stationName2.indexOf(names[0]) != -1 || stationName2.indexOf(names[1].substring(0,names[1].length()-1)) != -1)){
  997 + if((stationName.indexOf(names[0]) != -1 || stationName.indexOf(names[1].substring(0,names[1].length()-1)) != -1 || stationName2.indexOf(names[0]) != -1 || stationName2.indexOf(names[1].substring(0,names[1].length()-1)) != -1)){
  998 + stationRoutes.get(i).setIndustryCode(industryCode);
  999 + listMactah.add(stationRoutes.get(i));
  1000 + break;
  1001 + }
  1002 + }else {
  1003 +// if(stationRoutes.get(i).getStationMark().equals(smd.getStationType()) && (stationName.indexOf(name) != -1 || stationName2.indexOf(name) != -1)){
  1004 + if(stationName.indexOf(name) != -1 || stationName2.indexOf(name) != -1){
  1005 +// if(stationRoutes.get(i).getStationMark().equals(smd.getStationType()) && (name.equals(stationName) || name.equals(stationName2))){
  1006 +
  1007 + stationRoutes.get(i).setIndustryCode(industryCode);
  1008 + listMactah.add(stationRoutes.get(i));
  1009 + break;
  1010 + }
  1011 + }
  1012 + }
  1013 + }
  1014 + }
  1015 + }
  1016 + }
  1017 +
  1018 + private String subLine2Ftp(LineRegion lineRegion) {
  1019 + StringBuilder builder = new StringBuilder();
  1020 + int len = lineRegion.getStationRoutes().size();
  1021 + int idx = 1;
  1022 + for (int i = 0;i < len;i++) {
  1023 + LsStationRoute route = lineRegion.getStationRoutes().get(i);
  1024 + builder.append(route.getCenterPointWgs().getPosition().getCoordinate(0))
  1025 + .append("\t").append(route.getCenterPointWgs().getPosition().getCoordinate(1))
  1026 + .append("\t").append(i == len - 1 ? 2 : 1)
  1027 + .append("\t").append(idx).append("\t");
  1028 + for (int j = 0;j < 8 - route.getStationCode().length();j++) {
  1029 + builder.append("0");
  1030 + }
  1031 + builder.append(route.getStationCode())
  1032 + .append("\t").append((int) route.getDistances().doubleValue() * 1000)
  1033 + .append("\t0")
  1034 + .append("\t").append(route.getStationName())
  1035 + .append("\t").append(route.getStationNameEn())
  1036 + .append("\r\n");
  1037 +
  1038 + idx++;
  1039 + }
  1040 +
  1041 + return builder.toString();
  1042 + }
  1043 +
  1044 + /**
  1045 + * tts合成及打包
  1046 + * @param objects
  1047 + * @param line
  1048 + * @param languages 语言 如:cn、en、sh
  1049 + */
  1050 + private InputStream ttsAndZip(List<Object[]> objects, Line line, Set<String> languages) throws Exception {
  1051 + String lineId = line.getLineCode();
  1052 + StringBuilder cnBuilder = new StringBuilder(line.getName()).append("[p1000]"), enBuilder = new StringBuilder("Hello[p1000]");
  1053 + int ups = 0, downs = 0;
  1054 + for (int i = 0;i < objects.size();i++) {
  1055 + Object[] objArr = objects.get(i);
  1056 + int direction = (int) objArr[8];
  1057 + String stationName = objArr[7] == null ? null : objArr[7].toString(), stationNameEn = objArr[9] == null ? null : objArr[9].toString();
  1058 + if (StringUtils.isEmpty(stationName)) {
  1059 + throw new RuntimeException("存在异常的中文站点名称");
  1060 + }
  1061 + // 如果要生成英语报站语音
  1062 + if (languages.contains("en")) {
  1063 + if (StringUtils.isEmpty(stationNameEn)) {
  1064 + throw new RuntimeException("存在异常的英文站点名称");
  1065 + }
  1066 + enBuilder.append(stationNameEn).append("[p1000]");
  1067 + }
  1068 + cnBuilder.append(stationName).append("[p1000]");
  1069 + if (direction == 0) {
  1070 + ups++;
  1071 + } else if (direction == 1) {
  1072 + // 环线
  1073 + if (line.getLinePlayType() == 1) {
  1074 + break;
  1075 + }
  1076 + downs++;
  1077 + }
  1078 + }
  1079 + cnBuilder.delete(cnBuilder.length() - 8, cnBuilder.length() - 1);
  1080 + enBuilder.delete(enBuilder.length() - 8, enBuilder.length() - 1);
  1081 +
  1082 + // 文本转语音并进行分割
  1083 + // 音频存放及压缩文件路径
  1084 + String linePath = String.format(linePathPattern, lineId), voicePath = String.format("%s%s.zip", linePath, lineId);
  1085 + try {
  1086 + String path = String.format("%scn.mp3", linePath);
  1087 + IFlyUtils.textToSpeechCn(cnBuilder.toString(), path);
  1088 + AudioOperationUtils.splitBySilence(path, String.format("%scn", linePath), 500, -40);
  1089 + } catch (Exception e) {
  1090 + throw new RuntimeException(e);
  1091 + }
  1092 + if (languages.contains("sh")) {
  1093 + try {
  1094 + String path = String.format("%ssh.mp3", linePath);
  1095 + IFlyUtils.textToSpeechSh(cnBuilder.toString(), path);
  1096 + AudioOperationUtils.splitBySilence(path, String.format("%ssh", linePath), 500, -40);
  1097 + } catch (Exception e) {
  1098 + throw new RuntimeException(e);
  1099 + }
  1100 + }
  1101 + if (languages.contains("en")) {
  1102 + try {
  1103 + String path = String.format("%sen.mp3", linePath);
  1104 + IFlyUtils.textToSpeechEn(enBuilder.toString(), path);
  1105 + AudioOperationUtils.splitBySilence(path, String.format("%sen", linePath), 500, -40);
  1106 + } catch (Exception e) {
  1107 + throw new RuntimeException(e);
  1108 + }
  1109 + }
  1110 + // 删除原线路音频
  1111 + File file = new File(linePath);
  1112 + for (File f : file.listFiles()) {
  1113 + if (f.isFile() && f.getName().endsWith(".mp3")) {
  1114 + file.delete();
  1115 + }
  1116 + }
  1117 +
  1118 + // 合并每站起步、到达语音
  1119 + int seq = 1, startSeq = 1, direction = 0;
  1120 + seq = merge(lineId, seq, startSeq, direction, ups, languages);
  1121 + startSeq = ups + 1;
  1122 + direction = 1;
  1123 + merge(lineId, seq, startSeq, direction, ups + downs, languages);
  1124 +
  1125 + // 压缩音频到zip
  1126 + ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(voicePath));
  1127 + for (File f : file.listFiles()) {
  1128 + if (f.isFile() && f.getName().endsWith(".mp3")) {
  1129 + addFileToZip(zos, f);
  1130 + }
  1131 + }
  1132 + // Key打头音频
  1133 + file = new File(commonPath);
  1134 + for (File f : file.listFiles()) {
  1135 + if (f.isFile() && f.getName().startsWith("Key-")) {
  1136 + addFileToZip(zos, f);
  1137 + }
  1138 + }
  1139 + zos.flush();
  1140 + zos.close();
  1141 +
  1142 + return new FileInputStream(voicePath);
  1143 + }
  1144 +
  1145 + private static void addFileToZip(ZipOutputStream zos, File file) throws IOException {
  1146 + FileInputStream fis = new FileInputStream(file);
  1147 + ZipEntry zipEntry = new ZipEntry(file.getName());
  1148 + zos.putNextEntry(zipEntry);
  1149 +
  1150 + byte[] bytes = new byte[4096];
  1151 + int length;
  1152 + while ((length = fis.read(bytes)) >= 0) {
  1153 + zos.write(bytes, 0, length);
  1154 + }
  1155 +
  1156 + zos.closeEntry();
  1157 + fis.close();
  1158 + }
  1159 +
  1160 + private int merge(String lineId, int seq, int startSeq, int direction, int terminal, Set<String> languages) throws Exception {
  1161 + for (int i = startSeq;i <= terminal;i++) {
  1162 + if (i > startSeq) {
  1163 + if (i == startSeq + 1) {
  1164 + // 生成首站
  1165 + mergeOriginStart(lineId, seq, i, direction, terminal, languages);
  1166 + mergeNormalArrive(lineId, seq, i, direction, terminal, languages);
  1167 + } else if (i == terminal) {
  1168 + // 生成终点站
  1169 + mergeNormalStart(lineId, seq, i, direction, terminal, languages);
  1170 + mergeTerminalArrive(lineId, seq, i, direction, terminal, languages);
  1171 + } else {
  1172 + // 生成中途站
  1173 + mergeNormalStart(lineId, seq, i, direction, terminal, languages);
  1174 + mergeNormalArrive(lineId, seq, i, direction, terminal, languages);
  1175 + }
  1176 + seq++;
  1177 + }
  1178 + }
  1179 +
  1180 + return seq;
  1181 + }
  1182 +
  1183 + private void mergeOriginStart(String lineId, int seq, int stationLevel, int direction, int terminal, Set<String> languages) throws Exception {
  1184 + String linePath = String.format(linePathPattern, lineId);
  1185 + List<String> arr = Arrays.asList(commonPath + "cn_origin_1.mp3", linePath + String.format("cn/%03d.mp3", 0), commonPath + "cn_origin_2.mp3", linePath + String.format("cn/%03d.mp3", terminal), commonPath + "sh_origin_1.mp3", linePath + String.format("sh/%03d.mp3", 0), commonPath + "sh_origin_2.mp3", linePath + String.format("cn/%03d.mp3", terminal), commonPath + "cn_start_1.mp3", linePath + String.format("cn/%03d.mp3", stationLevel), commonPath + "cn_start_2.mp3", commonPath + "sh_start_1.mp3", linePath + String.format("sh/%03d.mp3", stationLevel), commonPath + "sh_start_2.mp3", commonPath + "en_1.mp3", linePath + String.format("en/%03d.mp3", stationLevel), commonPath + "cn_start_3.mp3", commonPath + "sh_start_3.mp3");
  1186 + List<String> inputPaths = new ArrayList<>();
  1187 + for (String path : arr) {
  1188 + for (String lang : languages) {
  1189 + if (path.indexOf(lang) > -1) {
  1190 + inputPaths.add(path);
  1191 + break;
  1192 + }
  1193 + }
  1194 + }
  1195 + AudioOperationUtils.merge(inputPaths, String.format("%s%03da%s-%03d-%s-Start.mp3", linePath, seq, direction == 0 ? "u" : "d", direction == 0 ? stationLevel : terminal - stationLevel + 1, direction == 0 ? "Up" : "Dn"));
  1196 + }
  1197 +
  1198 + private void mergeNormalStart(String lineId, int seq, int stationLevel, int direction, int terminal, Set<String> languages) throws Exception {
  1199 + String linePath = String.format(linePathPattern, lineId);
  1200 + List<String> arr = Arrays.asList(commonPath + "cn_start.mp3", linePath + String.format("cn/%03d.mp3", stationLevel), commonPath + "cn_start_2.mp3", commonPath + "sh_start_1.mp3", linePath + String.format("sh/%03d.mp3", stationLevel), commonPath + "sh_start_2.mp3", commonPath + "en_1.mp3", linePath + String.format("en/%03d.mp3", stationLevel), commonPath + "cn_start_3.mp3", commonPath + "sh_start_3.mp3");
  1201 + List<String> inputPaths = new ArrayList<>();
  1202 + for (String path : arr) {
  1203 + for (String lang : languages) {
  1204 + if (path.indexOf(lang) > -1) {
  1205 + inputPaths.add(path);
  1206 + break;
  1207 + }
  1208 + }
  1209 + }
  1210 + AudioOperationUtils.merge(inputPaths, String.format("%s%03da%s-%03d-%s-Start.mp3", linePath, seq, direction == 0 ? "u" : "d", direction == 0 ? stationLevel : terminal - stationLevel + 1, direction == 0 ? "Up" : "Dn"));
  1211 + }
  1212 +
  1213 + private void mergeNormalArrive(String lineId, int seq, int stationLevel, int direction, int terminal, Set<String> languages) throws Exception {
  1214 + String linePath = String.format(linePathPattern, lineId);
  1215 + List<String> arr = new ArrayList<>(Arrays.asList(commonPath + "cn_arrive.mp3", linePath + String.format("cn/%03d.mp3", stationLevel), commonPath + "cn_arrive_1.mp3", linePath + String.format("sh/%03d.mp3", stationLevel), commonPath + "sh_arrive_1.mp3", commonPath + "en_2.mp3", linePath + String.format("en/%03d.mp3", stationLevel)));
  1216 + List<String> inputPaths = new ArrayList<>();
  1217 + if (languages.contains("sh")) {
  1218 + for (int i = 0;i < 3;i++) {
  1219 + arr.add(linePath + String.format("cn/%03d.mp3", 0));
  1220 + arr.add(commonPath + "cn_origin_2.mp3");
  1221 + arr.add(linePath + String.format("cn/%03d.mp3", terminal));
  1222 + arr.add(linePath + String.format("sh/%03d.mp3", 0));
  1223 + arr.add(commonPath + "sh_origin_2.mp3");
  1224 + arr.add(linePath + String.format("sh/%03d.mp3", terminal));
  1225 + }
  1226 + } else {
  1227 + arr.add(linePath + String.format("cn/%03d.mp3", 0));
  1228 + arr.add(commonPath + "cn_origin_2.mp3");
  1229 + arr.add(linePath + String.format("cn/%03d.mp3", terminal));
  1230 + }
  1231 + for (String path : arr) {
  1232 + for (String lang : languages) {
  1233 + if (path.indexOf(lang) > -1) {
  1234 + inputPaths.add(path);
  1235 + break;
  1236 + }
  1237 + }
  1238 + }
  1239 + AudioOperationUtils.merge(inputPaths, String.format("%s%03db%s-%03d-%s-Arrive.mp3", linePath, seq, direction == 0 ? "u" : "d", direction == 0 ? stationLevel : terminal - stationLevel + 1, direction == 0 ? "Up" : "Dn"));
  1240 + }
  1241 +
  1242 + private void mergeTerminalArrive(String lineId, int seq, int stationLevel, int direction, int terminal, Set<String> languages) throws Exception {
  1243 + String linePath = String.format(linePathPattern, lineId);
  1244 + List<String> arr = Arrays.asList(commonPath + "cn_terminal.mp3", linePath + String.format("cn/%03d.mp3", stationLevel), commonPath + "cn_arrive_1.mp3", commonPath + "sh_terminal.mp3", linePath + String.format("sh/%03d.mp3", stationLevel), commonPath + "sh_arrive_1.mp3", commonPath + "en_3.mp3", linePath + String.format("en/%03d.mp3", stationLevel), commonPath + "terminal_music.mp3");
  1245 + List<String> inputPaths = new ArrayList<>();
  1246 + for (String path : arr) {
  1247 + for (String lang : languages) {
  1248 + if (path.indexOf(lang) > -1 || path.indexOf("terminal_music") > -1) {
  1249 + inputPaths.add(path);
  1250 + break;
  1251 + }
  1252 + }
  1253 + }
  1254 + AudioOperationUtils.merge(inputPaths, String.format("%s%03db%s-%03d-%s-Arrive.mp3", linePath, seq, direction == 0 ? "u" : "d", direction == 0 ? stationLevel : terminal - stationLevel + 1, direction == 0 ? "Up" : "Dn"));
  1255 + }
  1256 +
  1257 + private void description() {
  1258 + // Next stop is (en_1.mp3)
  1259 + // We are arrival at (en_2.mp3)
  1260 + // We are arrival at the terminal (en_3.mp3)
  1261 + // 叮咚+欢迎乘坐 (cn_origin_1.mp3)
  1262 + // 公交车方向 (cn_origin_2.mp3)
  1263 + // 叮咚+车辆起步请拉好扶手投币后请配合朝里走下一站 (cn_start.mp3)
  1264 + // 下一站 (cn_start_1.mp3)
  1265 + // 请准备从后门下车 (cn_start_2.mp3)
  1266 + // 乘客们请给需要帮助的乘客让个座谢谢 (cn_start_3.mp3)
  1267 + // 叮咚+车辆进站请注意安全 (cn_arrive.mp3)
  1268 + // 到了请配合从后门下车开门请当心 (cn_arrive_1.mp3)
  1269 + // 叮咚+终点站 (cn_terminal.mp3)
  1270 + // 欢迎乘坐(沪) (sh_origin_1.mp3)
  1271 + // 公交车方向(沪) (sh_origin_2.mp3)
  1272 + // 下一站(沪) (sh_start_1.mp3)
  1273 + // 请准备从后门下车 (sh_start_2.mp3)
  1274 + // 乘客们请给需要帮助的乘客让个座谢谢(沪) (sh_start_3.mp3)
  1275 + // 到了请配合从后门下车开门请当心(沪) (sh_arrive_1.mp3)
  1276 + // 终点站(沪) (sh_terminal.mp3)
  1277 + // 终点音乐 (terminal_music.mp3)
  1278 + }
  1279 +}
src/main/java/com/bsth/util/AudioOperationUtils.java 0 → 100644
  1 +package com.bsth.util;
  2 +
  3 +
  4 +import org.bytedeco.javacv.FFmpegFrameGrabber;
  5 +import org.bytedeco.javacv.FFmpegFrameRecorder;
  6 +import org.bytedeco.javacv.Frame;
  7 +
  8 +import java.io.*;
  9 +import java.nio.ShortBuffer;
  10 +import java.util.ArrayList;
  11 +import java.util.List;
  12 +
  13 +public class AudioOperationUtils {
  14 + public static void main(String[] args) throws Exception {
  15 +// int duration = 450000;
  16 +// double silenceThreshold = -40; // 声音阈值,可以根据需要调整,单位通常是分贝dB
  17 +// splitBySilence("D:\\tts.mp3", "D:\\88814\\cn", duration, silenceThreshold);
  18 +
  19 + List<String> paths = new ArrayList<>();
  20 + paths.add("D:/speech/803111/cn/000.mp3");
  21 + paths.add("D:/speech/803111/cn/001.mp3");
  22 + merge(paths, "D:/speech/803111/results.mp3");
  23 + }
  24 +
  25 + public static void merge(List<String> inputPaths, String outputPath) throws Exception {
  26 + File file = new File(outputPath);
  27 + if (!file.getParentFile().exists()) {
  28 + file.getParentFile().mkdirs();
  29 + }
  30 + FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(new File(outputPath), 1);
  31 +
  32 + int i = 0;
  33 + Frame frame = null;
  34 + for (String inputPath : inputPaths) {
  35 + FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputPath);
  36 + grabber.start();
  37 + if (i == 0) {
  38 + recorder.setAudioCodec(grabber.getAudioCodec());
  39 + recorder.setFrameRate(grabber.getFrameRate());
  40 + recorder.setFormat(grabber.getFormat());
  41 + recorder.start();
  42 + }
  43 + while ((frame = grabber.grabSamples()) != null) {
  44 + recorder.record(frame);
  45 + }
  46 + grabber.stop();
  47 + grabber.close();
  48 + i++;
  49 + }
  50 + recorder.stop();
  51 + recorder.close();
  52 + }
  53 +
  54 + public static void splitBySilence(String inputPath, String outputPath, int duration, double silenceThreshold) throws Exception {
  55 + File file = new File(outputPath);
  56 + if (!file.exists()) {
  57 + file.mkdirs();
  58 + }
  59 + boolean isSilent = false;
  60 + FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputPath);
  61 + grabber.start();
  62 + Frame frame = null;
  63 + List<SilenceInfo> silenceInfos = new ArrayList<>();
  64 + long start = 0, end = 0;
  65 + while((frame = grabber.grabSamples()) != null) {
  66 + ShortBuffer buffer = (ShortBuffer) frame.samples[0];
  67 + double energy = 0;
  68 + while (buffer.hasRemaining()) {
  69 + short sample = buffer.get();
  70 + energy += sample * sample;
  71 + }
  72 + energy /= buffer.capacity();
  73 + double db = 20 * Math.log10(Math.sqrt(energy));
  74 + if (db < silenceThreshold) {
  75 + if (!isSilent && start == 0) {
  76 + isSilent = true;
  77 + start = frame.timestamp;
  78 + }
  79 + } else {
  80 + if (start != 0 && frame.timestamp - start >= duration) {
  81 + SilenceInfo info = new SilenceInfo(end, start);
  82 + silenceInfos.add(info);
  83 + end = frame.timestamp;
  84 + }
  85 + isSilent = false;
  86 + start = 0;
  87 + }
  88 + }
  89 + if (silenceInfos.size() > 0) {
  90 + SilenceInfo info = new SilenceInfo(end, grabber.getLengthInTime());
  91 + silenceInfos.add(info);
  92 + }
  93 + grabber.stop();
  94 + grabber.close();
  95 + grabber = new FFmpegFrameGrabber(inputPath);
  96 + grabber.start();
  97 + int idx = 0;
  98 + boolean flag = false;
  99 + FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(new File(String.format("%s%s%03d.mp3", outputPath, File.separator, idx)), 1);
  100 + recorder.setAudioCodec(grabber.getAudioCodec());
  101 + recorder.setFrameRate(grabber.getFrameRate());
  102 + recorder.setFormat(grabber.getFormat());
  103 + recorder.start();
  104 + SilenceInfo info = silenceInfos.get(idx);
  105 + while ((frame = grabber.grabSamples()) != null) {
  106 + if (idx < silenceInfos.size()) {
  107 + if (frame.timestamp >= info.start && frame.timestamp <= info.end) {
  108 + recorder.record(frame);
  109 + flag = false;
  110 + } else {
  111 + if (!flag) {
  112 + flag = true;
  113 + recorder.stop();
  114 + recorder.close();
  115 + idx++;
  116 + info = silenceInfos.get(idx);
  117 + recorder = new FFmpegFrameRecorder(new File(String.format("%s%s%03d.mp3", outputPath, File.separator, idx)), 1);
  118 + recorder.start();
  119 + recorder.setAudioCodec(grabber.getAudioCodec());
  120 + recorder.setFrameRate(grabber.getFrameRate());
  121 + recorder.setFormat(grabber.getFormat());
  122 + }
  123 + }
  124 + }
  125 + }
  126 + if (recorder != null) {
  127 + recorder.stop();
  128 + recorder.close();
  129 + }
  130 + }
  131 +
  132 + public final static class SilenceInfo {
  133 +
  134 + private long start;
  135 +
  136 + private long end;
  137 +
  138 + public SilenceInfo() {}
  139 +
  140 + public SilenceInfo(long start, long end) {
  141 + this.start = start;
  142 + this.end = end;
  143 + }
  144 +
  145 + public long getStart() {
  146 + return start;
  147 + }
  148 +
  149 + public void setStart(long start) {
  150 + this.start = start;
  151 + }
  152 +
  153 + public long getEnd() {
  154 + return end;
  155 + }
  156 +
  157 + public void setEnd(long end) {
  158 + this.end = end;
  159 + }
  160 + }
  161 +}
src/main/java/com/bsth/util/IFlyUtils.java 0 → 100644
  1 +package com.bsth.util;
  2 +
  3 +import com.bsth.entity.speech.SpeechRequest;
  4 +import com.bsth.entity.speech.SpeechResponse;
  5 +import com.fasterxml.jackson.core.JsonProcessingException;
  6 +import com.fasterxml.jackson.databind.ObjectMapper;
  7 +import org.java_websocket.client.WebSocketClient;
  8 +import org.java_websocket.handshake.ServerHandshake;
  9 +import org.slf4j.Logger;
  10 +import org.slf4j.LoggerFactory;
  11 +
  12 +import javax.crypto.Mac;
  13 +import javax.crypto.spec.SecretKeySpec;
  14 +import java.io.*;
  15 +import java.net.URI;
  16 +import java.net.URL;
  17 +import java.net.URLEncoder;
  18 +import java.nio.charset.StandardCharsets;
  19 +import java.text.SimpleDateFormat;
  20 +import java.util.*;
  21 +
  22 +public class IFlyUtils {
  23 +
  24 + private final static ObjectMapper mapper = new ObjectMapper();
  25 +
  26 + private final static Logger log = LoggerFactory.getLogger(IFlyUtils.class);
  27 +
  28 + private final static String apiKey = "46780e6779b6b1ba93503f24f097b771";
  29 +
  30 + private final static String apiSecret = "ZWFjNzkzMTkzNzI3YmMzMTgwMWUzMWE0";
  31 +
  32 + private final static String appId = "b4b21ad4";
  33 +
  34 + /**
  35 + * 生成普通话语音
  36 + * text以","进行分割
  37 + * @param text
  38 + */
  39 + public static void textToSpeechCn(String text, String outputPath) throws Exception {
  40 + File file = new File(outputPath);
  41 + if (!file.getParentFile().exists()) {
  42 + file.getParentFile().mkdirs();
  43 + }
  44 + String wsUrl = getAuthUrl("https://tts-api.xfyun.cn/v2/tts", apiKey, apiSecret).replace("https://", "wss://");
  45 + SpeechRequest request = new SpeechRequest();
  46 + request.getCommon().put("app_id", appId);
  47 + request.getBusiness().put("aue", "lame");
  48 + request.getBusiness().put("sfl", 1);
  49 + request.getBusiness().put("vcn", "x4_lingxiaoshan_profnews");
  50 + request.getData().put("text", Base64.getEncoder().encodeToString(text.replace(",", "[p1000]").getBytes("GBK")));
  51 + request.getData().put("status", 2);
  52 + websocketWork(wsUrl, request, new FileOutputStream(file));
  53 + while (!request.isCompleted()) {
  54 + Thread.sleep(500);
  55 + }
  56 + }
  57 +
  58 + /**
  59 + * 生成上海话语音
  60 + * text以","进行分割
  61 + * @param text
  62 + */
  63 + public static void textToSpeechSh(String text, String outputPath) throws Exception {
  64 + String wsUrl = getAuthUrl("https://tts-api.xfyun.cn/v2/tts", apiKey, apiSecret).replace("https://", "wss://");
  65 + SpeechRequest request = new SpeechRequest();
  66 + request.getCommon().put("app_id", appId);
  67 + request.getBusiness().put("aue", "lame");
  68 + request.getBusiness().put("sfl", 1);
  69 + request.getBusiness().put("vcn", "x3_ziling");
  70 + request.getData().put("text", Base64.getEncoder().encodeToString(text.replace(",", "[p1000]").getBytes("GBK")));
  71 + request.getData().put("status", 2);
  72 + websocketWork(wsUrl, request, new FileOutputStream(outputPath));
  73 + while (!request.isCompleted()) {
  74 + Thread.sleep(500);
  75 + }
  76 + }
  77 +
  78 + /**
  79 + * 生成英语语音
  80 + * text以","进行分割
  81 + * @param text
  82 + */
  83 + public static void textToSpeechEn(String text, String outputPath) throws Exception {
  84 + String wsUrl = getAuthUrl("https://tts-api.xfyun.cn/v2/tts", apiKey, apiSecret).replace("https://", "wss://");
  85 + SpeechRequest request = new SpeechRequest();
  86 + request.getCommon().put("app_id", appId);
  87 + request.getBusiness().put("aue", "lame");
  88 + request.getBusiness().put("sfl", 1);
  89 + request.getBusiness().put("vcn", "x4_enus_luna_assist");
  90 + request.getData().put("text", Base64.getEncoder().encodeToString(text.replace(",", "[p1000]").getBytes(StandardCharsets.UTF_8)));
  91 + request.getData().put("status", 2);
  92 + websocketWork(wsUrl, request, new FileOutputStream(outputPath));
  93 + while (!request.isCompleted()) {
  94 + Thread.sleep(500);
  95 + }
  96 + }
  97 +
  98 + public static void websocketWork(String wsUrl, SpeechRequest request, OutputStream out) {
  99 + try {
  100 + URI uri = new URI(wsUrl);
  101 + WebSocketClient webSocketClient = new WebSocketClient(uri) {
  102 + @Override
  103 + public void onOpen(ServerHandshake serverHandshake) {
  104 + try {
  105 + this.send(mapper.writeValueAsString(request));
  106 + } catch (JsonProcessingException e) {
  107 + throw new RuntimeException(e);
  108 + }
  109 + }
  110 +
  111 + @Override
  112 + public void onMessage(String text) {
  113 + try {
  114 + SpeechResponse response = mapper.readValue(text, SpeechResponse.class);
  115 + log.info("response: {}", response);
  116 + if (response.getCode() != 0) {
  117 + log.error("在线语音合成发生错误");
  118 + }
  119 + if (response.getData() != null) {
  120 + byte[] bytes = Base64.getDecoder().decode(response.getData().getAudio());
  121 + out.write(bytes);
  122 + out.flush();
  123 + if (response.getData().getStatus() == 2) {
  124 + request.setCompleted(true);
  125 + out.close();
  126 + }
  127 + }
  128 + } catch (IOException e) {
  129 + throw new RuntimeException(e);
  130 + }
  131 + }
  132 +
  133 + @Override
  134 + public void onClose(int i, String s, boolean b) {
  135 + System.out.println("ws链接已关闭,本次请求完成...");
  136 + }
  137 +
  138 + @Override
  139 + public void onError(Exception e) {
  140 + log.error("发生错误", e);
  141 + }
  142 + };
  143 + webSocketClient.connect();
  144 + } catch (Exception e) {
  145 + log.error("", e);
  146 + }
  147 + }
  148 +
  149 + /**
  150 + * 讯飞语音合成鉴权
  151 + * @param hostUrl
  152 + * @param apiKey
  153 + * @param apiSecret
  154 + * @return
  155 + * @throws Exception
  156 + */
  157 + public static String getAuthUrl(String hostUrl, String apiKey, String apiSecret) throws Exception {
  158 + URL url = new URL(hostUrl);
  159 + // 时间
  160 + SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US);
  161 + format.setTimeZone(TimeZone.getTimeZone("GMT"));
  162 + String date = format.format(new Date());
  163 + // 拼接
  164 + String preStr = "host: " + url.getHost() + "\n" +
  165 + "date: " + date + "\n" +
  166 + "GET " + url.getPath() + " HTTP/1.1";
  167 + // SHA256加密
  168 + Mac mac = Mac.getInstance("hmacsha256");
  169 + SecretKeySpec spec = new SecretKeySpec(apiSecret.getBytes(StandardCharsets.UTF_8), "hmacsha256");
  170 + mac.init(spec);
  171 + byte[] hexDigits = mac.doFinal(preStr.getBytes(StandardCharsets.UTF_8));
  172 + // Base64加密
  173 + String sha = Base64.getEncoder().encodeToString(hexDigits);
  174 + // 拼接
  175 + String authorization = String.format("api_key=\"%s\", algorithm=\"%s\", headers=\"%s\", signature=\"%s\"", apiKey, "hmac-sha256", "host date request-line", sha);
  176 + StringBuilder sb = new StringBuilder(hostUrl);
  177 + sb.append("?authorization=").append(Base64.getEncoder().encodeToString(authorization.getBytes(StandardCharsets.UTF_8)))
  178 + .append("&date=").append(URLEncoder.encode(date))
  179 + .append("&host=").append(URLEncoder.encode(url.getHost()));
  180 +// // 拼接地址
  181 +// HttpUrl httpUrl = Objects.requireNonNull(HttpUrl.parse("https://" + url.getHost() + url.getPath())).newBuilder().//
  182 +// addQueryParameter("authorization", Base64.getEncoder().encodeToString(authorization.getBytes(StandardCharsets.UTF_8))).//
  183 +// addQueryParameter("date", date).//
  184 +// addQueryParameter("host", url.getHost()).//
  185 +// build();
  186 +
  187 + return sb.toString();
  188 + }
  189 +}
0 \ No newline at end of file 190 \ No newline at end of file
src/main/resources/application-cloud.properties
1 -server.port=9088  
2 -  
3 -# dubbo����ʹ�ÿ���flag  
4 -dubbo.use=false  
5 -  
6 -#JPA  
7 -spring.jpa.hibernate.ddl-auto= none  
8 -spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl  
9 -spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy  
10 -spring.jpa.database= MYSQL  
11 -spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true  
12 -spring.jpa.show-sql= false  
13 -spring.jpa.properties.hibernate.dialect= org.hibernate.spatial.dialect.mysql.MySQL56InnoDBSpatialDialect  
14 -  
15 -#DATABASE  
16 -spring.datasource.driver-class-name= com.mysql.jdbc.Driver  
17 -spring.datasource.url= jdbc:mysql://192.170.100.132/control?useUnicode=true&characterEncoding=utf-8&useSSL=false  
18 -spring.datasource.username= root  
19 -spring.datasource.password= root2jsp  
20 -spring.datasource.type= com.zaxxer.hikari.HikariDataSource  
21 -  
22 -#DATASOURCE SETTING  
23 -spring.datasource.hikari.minimum-idle= 8  
24 -spring.datasource.hikari.maximum-pool-size= 100  
25 -#spring.datasource.hikari.auto-commit= true  
26 -spring.datasource.hikari.idle-timeout= 60000  
27 -#spring.datasource.hikari.pool-name= HikariPool  
28 -spring.datasource.hikari.max-lifetime= 1800000  
29 -spring.datasource.hikari.connection-timeout= 3000  
30 -spring.datasource.hikari.connection-test-query= SELECT 1  
31 -spring.datasource.hikari.validation-timeout= 3000  
32 -spring.datasource.hikari.register-mbeans=true  
33 -  
34 -kafka.use= true  
35 -spring.kafka.consumer.bootstrap-servers= 192.170.100.114:9092,192.170.100.114:9093,192.170.100.114:9094  
36 -spring.kafka.key-serializer= org.apache.kafka.common.serialization.StringSerializer  
37 -spring.kafka.value-serializer= org.apache.kafka.common.serialization.StringSerializer  
38 -spring.kafka.producer.buffer-memory= 33554432  
39 -spring.kafka.producer.acks= all  
40 -spring.kafka.consumer.group-id= schedule-system  
41 -spring.kafka.consumer.auto-offset-reset= latest  
42 -  
43 -sso.enabled= true  
44 -sso.systemcode = SYS0023  
45 -sso.http.url.login= https://112.64.45.51/portal/index.html#/login  
46 -sso.http.url.logout= https://112.64.45.51/information/api/v1/logout  
47 -sso.http.url.auth= https://112.64.45.51/information/authenticate/authorityAuthentication  
48 \ No newline at end of file 1 \ No newline at end of file
  2 +server.port=9088
  3 +
  4 +# dubbo����ʹ�ÿ���flag
  5 +dubbo.use=false
  6 +
  7 +#JPA
  8 +spring.jpa.hibernate.ddl-auto= none
  9 +spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
  10 +spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
  11 +spring.jpa.database= MYSQL
  12 +spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
  13 +spring.jpa.show-sql= false
  14 +spring.jpa.properties.hibernate.dialect= org.hibernate.spatial.dialect.mysql.MySQL56InnoDBSpatialDialect
  15 +
  16 +#DATABASE
  17 +spring.datasource.driver-class-name= com.mysql.jdbc.Driver
  18 +spring.datasource.url= jdbc:mysql://192.170.100.132/control?useUnicode=true&characterEncoding=utf-8&useSSL=false
  19 +spring.datasource.username= root
  20 +spring.datasource.password= root2jsp
  21 +spring.datasource.type= com.zaxxer.hikari.HikariDataSource
  22 +
  23 +#DATASOURCE SETTING
  24 +spring.datasource.hikari.minimum-idle= 8
  25 +spring.datasource.hikari.maximum-pool-size= 100
  26 +#spring.datasource.hikari.auto-commit= true
  27 +spring.datasource.hikari.idle-timeout= 60000
  28 +#spring.datasource.hikari.pool-name= HikariPool
  29 +spring.datasource.hikari.max-lifetime= 1800000
  30 +spring.datasource.hikari.connection-timeout= 3000
  31 +spring.datasource.hikari.connection-test-query= SELECT 1
  32 +spring.datasource.hikari.validation-timeout= 3000
  33 +spring.datasource.hikari.register-mbeans=true
  34 +
  35 +kafka.use= true
  36 +spring.kafka.consumer.bootstrap-servers= 192.170.100.114:9092,192.170.100.114:9093,192.170.100.114:9094
  37 +spring.kafka.key-serializer= org.apache.kafka.common.serialization.StringSerializer
  38 +spring.kafka.value-serializer= org.apache.kafka.common.serialization.StringSerializer
  39 +spring.kafka.producer.buffer-memory= 33554432
  40 +spring.kafka.producer.acks= all
  41 +spring.kafka.consumer.group-id= schedule-system
  42 +spring.kafka.consumer.auto-offset-reset= latest
  43 +
  44 +sso.enabled= true
  45 +sso.systemcode = SYS0023
  46 +sso.http.url.login= https://112.64.45.51/portal/index.html#/login
  47 +sso.http.url.logout= https://112.64.45.51/information/api/v1/logout
  48 +sso.http.url.auth= https://112.64.45.51/information/authenticate/authorityAuthentication
  49 +
  50 +path.speech.common = /data/control/speech/common/
  51 +path.speech.line = /data/control/speech/%s/
49 \ No newline at end of file 52 \ No newline at end of file
src/main/resources/application-dev.properties
1 -server.port=9088  
2 -  
3 -# dubbo服务化使用开关flag  
4 -dubbo.use=false  
5 -  
6 -#JPA  
7 -spring.jpa.hibernate.ddl-auto= none  
8 -spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl  
9 -spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy  
10 -spring.jpa.database= MYSQL  
11 -spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true  
12 -spring.jpa.show-sql= true  
13 -spring.jpa.properties.hibernate.dialect= org.hibernate.spatial.dialect.mysql.MySQL56InnoDBSpatialDialect  
14 -  
15 -#DATABASE  
16 -spring.datasource.driver-class-name= com.mysql.jdbc.Driver  
17 -#spring.datasource.url= jdbc:mysql://127.0.0.1/control?useUnicode=true&characterEncoding=utf-8&useSSL=false  
18 -##spring.datasource.url= jdbc:mysql://192.168.168.222/control?useUnicode=true&characterEncoding=utf-8&useSSL=false  
19 -#spring.datasource.username= root  
20 -#spring.datasource.password=  
21 -spring.datasource.url= jdbc:mysql://127.0.0.1/control?useUnicode=true&characterEncoding=utf-8&useSSL=false  
22 -spring.datasource.username= root  
23 -spring.datasource.password= root  
24 -#spring.datasource.url= jdbc:mysql://192.168.168.241/control?useUnicode=true&characterEncoding=utf-8&useSSL=false  
25 -#spring.datasource.username= root  
26 -#spring.datasource.password= root2jsp  
27 -spring.datasource.type= com.zaxxer.hikari.HikariDataSource  
28 -  
29 -#DATASOURCE SETTING  
30 -spring.datasource.hikari.minimum-idle= 8  
31 -spring.datasource.hikari.maximum-pool-size= 100  
32 -#spring.datasource.hikari.auto-commit= true  
33 -spring.datasource.hikari.idle-timeout= 60000  
34 -#spring.datasource.hikari.pool-name= HikariPool  
35 -spring.datasource.hikari.max-lifetime= 1800000  
36 -spring.datasource.hikari.connection-timeout= 3000  
37 -spring.datasource.hikari.connection-test-query= SELECT 1  
38 -spring.datasource.hikari.validation-timeout= 3000  
39 -spring.datasource.hikari.register-mbeans=true  
40 -  
41 -kafka.use= false  
42 -spring.kafka.consumer.bootstrap-servers= localhost:9092  
43 -spring.kafka.consumer.group-id= schedule-system  
44 -spring.kafka.consumer.auto-offset-reset= latest  
45 -spring.kafka.consumer.key-deserializer= org.apache.kafka.common.serialization.StringDeserializer  
46 -spring.kafka.consumer.value-deserializer= org.apache.kafka.common.serialization.StringDeserializer  
47 -  
48 -sso.enabled= false  
49 -sso.systemcode = SYS0019  
50 -sso.http.url.login= http://180.169.154.251:28090/portal/index.html#/login  
51 -sso.http.url.logout= http://180.169.154.251:18080/information/api/v1/logout  
52 -sso.http.url.auth= http://180.169.154.251:18080/information/authenticate/authorityAuthentication  
53 \ No newline at end of file 1 \ No newline at end of file
  2 +server.port=9088
  3 +
  4 +# dubbo服务化使用开关flag
  5 +dubbo.use=false
  6 +
  7 +#JPA
  8 +spring.jpa.hibernate.ddl-auto= none
  9 +spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
  10 +spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
  11 +spring.jpa.database= MYSQL
  12 +spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
  13 +spring.jpa.show-sql= true
  14 +spring.jpa.properties.hibernate.dialect= org.hibernate.spatial.dialect.mysql.MySQL56InnoDBSpatialDialect
  15 +
  16 +#DATABASE
  17 +spring.datasource.driver-class-name= com.mysql.jdbc.Driver
  18 +#spring.datasource.url= jdbc:mysql://127.0.0.1/control?useUnicode=true&characterEncoding=utf-8&useSSL=false
  19 +##spring.datasource.url= jdbc:mysql://192.168.168.222/control?useUnicode=true&characterEncoding=utf-8&useSSL=false
  20 +#spring.datasource.username= root
  21 +#spring.datasource.password=
  22 +spring.datasource.url= jdbc:mysql://127.0.0.1/control?useUnicode=true&characterEncoding=utf-8&useSSL=false
  23 +spring.datasource.username= root
  24 +spring.datasource.password= root
  25 +#spring.datasource.url= jdbc:mysql://192.168.168.241/control?useUnicode=true&characterEncoding=utf-8&useSSL=false
  26 +#spring.datasource.username= root
  27 +#spring.datasource.password= root2jsp
  28 +spring.datasource.type= com.zaxxer.hikari.HikariDataSource
  29 +
  30 +#DATASOURCE SETTING
  31 +spring.datasource.hikari.minimum-idle= 8
  32 +spring.datasource.hikari.maximum-pool-size= 100
  33 +#spring.datasource.hikari.auto-commit= true
  34 +spring.datasource.hikari.idle-timeout= 60000
  35 +#spring.datasource.hikari.pool-name= HikariPool
  36 +spring.datasource.hikari.max-lifetime= 1800000
  37 +spring.datasource.hikari.connection-timeout= 3000
  38 +spring.datasource.hikari.connection-test-query= SELECT 1
  39 +spring.datasource.hikari.validation-timeout= 3000
  40 +spring.datasource.hikari.register-mbeans=true
  41 +
  42 +kafka.use= false
  43 +spring.kafka.consumer.bootstrap-servers= localhost:9092
  44 +spring.kafka.consumer.group-id= schedule-system
  45 +spring.kafka.consumer.auto-offset-reset= latest
  46 +spring.kafka.consumer.key-deserializer= org.apache.kafka.common.serialization.StringDeserializer
  47 +spring.kafka.consumer.value-deserializer= org.apache.kafka.common.serialization.StringDeserializer
  48 +
  49 +sso.enabled= false
  50 +sso.systemcode = SYS0019
  51 +sso.http.url.login= http://180.169.154.251:28090/portal/index.html#/login
  52 +sso.http.url.logout= http://180.169.154.251:18080/information/api/v1/logout
  53 +sso.http.url.auth= http://180.169.154.251:18080/information/authenticate/authorityAuthentication
  54 +
  55 +path.speech.common = /data/control/speech/common/
  56 +path.speech.line = /data/control/speech/%s/
54 \ No newline at end of file 57 \ No newline at end of file
src/main/resources/application-test.properties
1 -server.port=9088  
2 -  
3 -# dubbo����ʹ�ÿ���flag  
4 -dubbo.use=false  
5 -  
6 -#JPA  
7 -spring.jpa.hibernate.ddl-auto= none  
8 -spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl  
9 -spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy  
10 -spring.jpa.database= MYSQL  
11 -spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true  
12 -spring.jpa.show-sql= false  
13 -spring.jpa.properties.hibernate.dialect= org.hibernate.spatial.dialect.mysql.MySQL56InnoDBSpatialDialect  
14 -  
15 -#DATABASE  
16 -spring.datasource.driver-class-name= com.mysql.jdbc.Driver  
17 -spring.datasource.url= jdbc:mysql://192.170.100.114/control?useUnicode=true&characterEncoding=utf-8&useSSL=false  
18 -spring.datasource.username= root  
19 -spring.datasource.password= root2jsp  
20 -spring.datasource.type= com.zaxxer.hikari.HikariDataSource  
21 -  
22 -#DATASOURCE SETTING  
23 -spring.datasource.hikari.minimum-idle= 8  
24 -spring.datasource.hikari.maximum-pool-size= 100  
25 -#spring.datasource.hikari.auto-commit= true  
26 -spring.datasource.hikari.idle-timeout= 60000  
27 -#spring.datasource.hikari.pool-name= HikariPool  
28 -spring.datasource.hikari.max-lifetime= 1800000  
29 -spring.datasource.hikari.connection-timeout= 3000  
30 -spring.datasource.hikari.connection-test-query= SELECT 1  
31 -spring.datasource.hikari.validation-timeout= 3000  
32 -spring.datasource.hikari.register-mbeans=true  
33 -  
34 -kafka.use= true  
35 -spring.kafka.consumer.bootstrap-servers= 192.170.100.114:9092,192.170.100.114:9093,192.170.100.114:9094  
36 -spring.kafka.consumer.group-id= schedule-system-test  
37 -spring.kafka.consumer.auto-offset-reset= latest  
38 -spring.kafka.consumer.key-deserializer= org.apache.kafka.common.serialization.StringDeserializer  
39 -spring.kafka.consumer.value-deserializer= org.apache.kafka.common.serialization.StringDeserializer  
40 -  
41 -sso.enabled= true  
42 -sso.systemcode = SYS0023  
43 -sso.http.url.login= https://112.64.45.51/portal/index.html#/login  
44 -sso.http.url.logout= https://112.64.45.51/information/api/v1/logout  
45 -sso.http.url.auth= https://112.64.45.51/information/authenticate/authorityAuthentication  
46 \ No newline at end of file 1 \ No newline at end of file
  2 +server.port=9088
  3 +
  4 +# dubbo����ʹ�ÿ���flag
  5 +dubbo.use=false
  6 +
  7 +#JPA
  8 +spring.jpa.hibernate.ddl-auto= none
  9 +spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
  10 +spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
  11 +spring.jpa.database= MYSQL
  12 +spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
  13 +spring.jpa.show-sql= false
  14 +spring.jpa.properties.hibernate.dialect= org.hibernate.spatial.dialect.mysql.MySQL56InnoDBSpatialDialect
  15 +
  16 +#DATABASE
  17 +spring.datasource.driver-class-name= com.mysql.jdbc.Driver
  18 +spring.datasource.url= jdbc:mysql://192.170.100.114/control?useUnicode=true&characterEncoding=utf-8&useSSL=false
  19 +spring.datasource.username= root
  20 +spring.datasource.password= root2jsp
  21 +spring.datasource.type= com.zaxxer.hikari.HikariDataSource
  22 +
  23 +#DATASOURCE SETTING
  24 +spring.datasource.hikari.minimum-idle= 8
  25 +spring.datasource.hikari.maximum-pool-size= 100
  26 +#spring.datasource.hikari.auto-commit= true
  27 +spring.datasource.hikari.idle-timeout= 60000
  28 +#spring.datasource.hikari.pool-name= HikariPool
  29 +spring.datasource.hikari.max-lifetime= 1800000
  30 +spring.datasource.hikari.connection-timeout= 3000
  31 +spring.datasource.hikari.connection-test-query= SELECT 1
  32 +spring.datasource.hikari.validation-timeout= 3000
  33 +spring.datasource.hikari.register-mbeans=true
  34 +
  35 +kafka.use= true
  36 +spring.kafka.consumer.bootstrap-servers= 192.170.100.114:9092,192.170.100.114:9093,192.170.100.114:9094
  37 +spring.kafka.consumer.group-id= schedule-system-test
  38 +spring.kafka.consumer.auto-offset-reset= latest
  39 +spring.kafka.consumer.key-deserializer= org.apache.kafka.common.serialization.StringDeserializer
  40 +spring.kafka.consumer.value-deserializer= org.apache.kafka.common.serialization.StringDeserializer
  41 +
  42 +sso.enabled= true
  43 +sso.systemcode = SYS0023
  44 +sso.http.url.login= https://112.64.45.51/portal/index.html#/login
  45 +sso.http.url.logout= https://112.64.45.51/information/api/v1/logout
  46 +sso.http.url.auth= https://112.64.45.51/information/authenticate/authorityAuthentication
  47 +
  48 +path.speech.common = /data/control/speech/common/
  49 +path.speech.line = /data/control/speech/%s/
47 \ No newline at end of file 50 \ No newline at end of file
src/main/resources/application.properties
1 -spring.profiles.active = cloud  
2 -  
3 -spring.view.suffix=.html  
4 -server.session-timeout=-1  
5 -  
6 -# File size limit  
7 -multipart.maxFileSize = -1  
8 -# Total request size for a multipart/form-data  
9 -multipart.maxRequestSize = -1  
10 -  
11 -server.compression.enabled=true  
12 -server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain,text/javascript,text/css,application/javascript  
13 -  
14 -# batch insert  
15 -hibernate.jdbc.batch_size = 50  
16 -  
17 -debug=false 1 +spring.profiles.active = test
  2 +
  3 +spring.view.suffix=.html
  4 +server.session-timeout=-1
  5 +
  6 +# File size limit
  7 +multipart.maxFileSize = -1
  8 +# Total request size for a multipart/form-data
  9 +multipart.maxRequestSize = -1
  10 +
  11 +server.compression.enabled=true
  12 +server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain,text/javascript,text/css,application/javascript
  13 +
  14 +# batch insert
  15 +hibernate.jdbc.batch_size = 50
  16 +
  17 +debug=false