Compare commits
85 Commits
5672c83a71
...
修正验证的bug!
Author | SHA1 | Date | |
---|---|---|---|
6671cb69c9 | |||
7abeffb61a | |||
54d73db62f | |||
8149e21e2f | |||
2847747f53 | |||
1231fe3132 | |||
fbe9f8e532 | |||
53849e4f74 | |||
d1bcb3b956 | |||
c0443d3a8b | |||
eb7f53ad4b | |||
91c99ba8f9 | |||
0fb8b90509 | |||
cd743c645f | |||
2d1d4dea66 | |||
24cdc66b7d | |||
5da53f02ea | |||
0587001de0 | |||
64170d2e67 | |||
51a2829433 | |||
59977ec9b6 | |||
9d57987f0c | |||
a78fad18ea | |||
07ae9f88a3 | |||
2dbe40b7a8 | |||
5496c06eea | |||
70884ab305 | |||
69434b3b58 | |||
1e8e58d3de | |||
9c1f141a00 | |||
f1c1d5a4a5 | |||
116b4a0f12 | |||
021b20876f | |||
2237690139 | |||
16c54998de | |||
9857451f05 | |||
ae7b2127bc | |||
17b8d4dde6 | |||
130f237af2 | |||
216c6926ac | |||
cb8563ce5c | |||
d23826e056 | |||
3dda8252f6 | |||
2202972510 | |||
7a9c55930e | |||
bc3b9b044f | |||
95b3ad8f1b | |||
4e1ca52d2f | |||
050edac28a | |||
83e73cfe60 | |||
f95d8ed08b | |||
b184846ea4 | |||
74a69767a2 | |||
4fae3cbd8e | |||
9f593e6787 | |||
94f5262402 | |||
3d302919de | |||
6579c08e5f | |||
ae51dde6a3 | |||
566809868a | |||
e5be1e0b66 | |||
c588131c12 | |||
be919a1d3a | |||
4bd1a4b98b | |||
1019dff1a9 | |||
aa2837af38 | |||
bc913171ee | |||
d7c667cb40 | |||
2378de88dc | |||
c4e04523ed | |||
540b44cf9d | |||
479eb32f7e | |||
5825b7a929 | |||
36166f5b60 | |||
cea1ff78f7 | |||
0e574c7031 | |||
f2c340d3cb | |||
a27a1c8d85 | |||
d2cbc91e9d | |||
91cef7bf0e | |||
f65b43534f | |||
0d1e389b3b | |||
ebf5b196e8 | |||
60a8453296 | |||
14983d296b |
10
.gitignore
vendored
10
.gitignore
vendored
@@ -1,3 +1,7 @@
|
||||
|
||||
target/*
|
||||
*.jar
|
||||
|
||||
# ---> C++
|
||||
# Prerequisites
|
||||
*.d
|
||||
@@ -90,3 +94,9 @@ buildNumber.properties
|
||||
# JDT-specific (Eclipse Java Development Tools)
|
||||
.classpath
|
||||
|
||||
code/java/天气灾害预警/target/
|
||||
code/java/天气灾害预警/out/
|
||||
*.jar
|
||||
*.iws
|
||||
*.log
|
||||
*.lck
|
||||
|
@@ -1,3 +1,8 @@
|
||||
# disaster_warrning
|
||||
|
||||
大灾预警
|
||||
|
||||
<h1 style="text-align:center;font-size:4rem;" title>气象灾害预警推送应用</h1>
|
||||
|
||||
**功能:**
|
||||
|
||||
- 从和风天气查询配置文件中列出地区的气象灾害预警;
|
||||
- 如果预警则推送厦门太保公众。
|
||||
|
139
code/java/DisasterWarning/.gitignore
vendored
Normal file
139
code/java/DisasterWarning/.gitignore
vendored
Normal file
@@ -0,0 +1,139 @@
|
||||
### Java template
|
||||
# Compiled class file
|
||||
*.class
|
||||
|
||||
# Log file
|
||||
*.log
|
||||
|
||||
# BlueJ files
|
||||
*.ctxt
|
||||
|
||||
# Mobile Tools for Java (J2ME)
|
||||
.mtj.tmp/
|
||||
|
||||
# Package Files #
|
||||
*.jar
|
||||
*.war
|
||||
*.nar
|
||||
*.ear
|
||||
*.zip
|
||||
*.tar.gz
|
||||
*.rar
|
||||
|
||||
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
|
||||
hs_err_pid*
|
||||
|
||||
### VisualStudioCode template
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
*.code-workspace
|
||||
|
||||
# Local History for Visual Studio Code
|
||||
.history/
|
||||
|
||||
### JetBrains template
|
||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
||||
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
||||
|
||||
# User-specific stuff
|
||||
.idea/**/workspace.xml
|
||||
.idea/**/tasks.xml
|
||||
.idea/**/usage.statistics.xml
|
||||
.idea/**/dictionaries
|
||||
.idea/**/shelf
|
||||
|
||||
# Generated files
|
||||
.idea/**/contentModel.xml
|
||||
|
||||
# Sensitive or high-churn files
|
||||
.idea/**/dataSources/
|
||||
.idea/**/dataSources.ids
|
||||
.idea/**/dataSources.local.xml
|
||||
.idea/**/sqlDataSources.xml
|
||||
.idea/**/dynamic.xml
|
||||
.idea/**/uiDesigner.xml
|
||||
.idea/**/dbnavigator.xml
|
||||
|
||||
# Gradle
|
||||
.idea/**/gradle.xml
|
||||
.idea/**/libraries
|
||||
|
||||
# Gradle and Maven with auto-import
|
||||
# When using Gradle or Maven with auto-import, you should exclude module files,
|
||||
# since they will be recreated, and may cause churn. Uncomment if using
|
||||
# auto-import.
|
||||
# .idea/artifacts
|
||||
# .idea/compiler.xml
|
||||
# .idea/jarRepositories.xml
|
||||
# .idea/modules.xml
|
||||
# .idea/*.iml
|
||||
# .idea/modules
|
||||
# *.iml
|
||||
# *.ipr
|
||||
|
||||
# CMake
|
||||
cmake-build-*/
|
||||
|
||||
# Mongo Explorer plugin
|
||||
.idea/**/mongoSettings.xml
|
||||
|
||||
# File-based project format
|
||||
*.iws
|
||||
|
||||
# IntelliJ
|
||||
out/
|
||||
|
||||
# mpeltonen/sbt-idea plugin
|
||||
.idea_modules/
|
||||
|
||||
# JIRA plugin
|
||||
atlassian-ide-plugin.xml
|
||||
|
||||
# Cursive Clojure plugin
|
||||
.idea/replstate.xml
|
||||
|
||||
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||
com_crashlytics_export_strings.xml
|
||||
crashlytics.properties
|
||||
crashlytics-build.properties
|
||||
fabric.properties
|
||||
|
||||
# Editor-based Rest Client
|
||||
.idea/httpRequests
|
||||
|
||||
# Android studio 3.1+ serialized cache file
|
||||
.idea/caches/build_file_checksums.ser
|
||||
|
||||
### Windows template
|
||||
# Windows thumbnail cache files
|
||||
Thumbs.db
|
||||
Thumbs.db:encryptable
|
||||
ehthumbs.db
|
||||
ehthumbs_vista.db
|
||||
|
||||
# Dump file
|
||||
*.stackdump
|
||||
|
||||
# Folder config file
|
||||
[Dd]esktop.ini
|
||||
|
||||
# Recycle Bin used on file shares
|
||||
$RECYCLE.BIN/
|
||||
|
||||
# Windows Installer files
|
||||
*.cab
|
||||
*.msi
|
||||
*.msix
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# Windows shortcuts
|
||||
*.lnk
|
||||
|
||||
target/*
|
||||
|
||||
logs/*
|
||||
logs
|
15
code/java/DisasterWarning/.vscode/launch.json
vendored
Normal file
15
code/java/DisasterWarning/.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
// 使用 IntelliSense 了解相关属性。
|
||||
// 悬停以查看现有属性的描述。
|
||||
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "java",
|
||||
"name": "Launch AppMain",
|
||||
"request": "launch",
|
||||
"mainClass": "AppMain",
|
||||
"projectName": "disaster_warning"
|
||||
}
|
||||
]
|
||||
}
|
7
code/java/DisasterWarning/.vscode/settings.json
vendored
Normal file
7
code/java/DisasterWarning/.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"java.configuration.updateBuildConfiguration": "automatic",
|
||||
"java.format.settings.url": "D:\\工作文档\\配置备份\\vscode\\eclipse-java-google-style.xml",
|
||||
"[java]": {
|
||||
"editor.detectIndentation": true
|
||||
}
|
||||
}
|
19
code/java/DisasterWarning/config.json
Normal file
19
code/java/DisasterWarning/config.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"title": "天气灾害预警配置文件",
|
||||
"key": "fe9fa8eeeb6f4301a92541eed565dd15",
|
||||
"query_url": "https://devapi.qweather.com/v7/warning/now?",
|
||||
"wechat_officalaccount_url": "https://cxxmwx.cpic.com.cn/app/index.php?i=2&c=entry&do=send_group_tpl_api&m=ok_tplmessage",
|
||||
"query_interval": 10,
|
||||
"cities": [
|
||||
{
|
||||
"city_name": "厦门",
|
||||
"city_code": "101230201"
|
||||
}
|
||||
],
|
||||
"notify_stuffs": [
|
||||
{
|
||||
"stuff_name": "王炜",
|
||||
"mobile_phone": "15959215339"
|
||||
}
|
||||
]
|
||||
}
|
14
code/java/DisasterWarning/db.json
Normal file
14
code/java/DisasterWarning/db.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"tns_name": "xmcx1",
|
||||
"ip_addr": "10.39.0.86",
|
||||
"jdbc_url": "jdbc:oracle:thin:@10.39.0.86:1521:xmcx1",
|
||||
"table_space": "wechat",
|
||||
"user_name": "wechat",
|
||||
"password": "@rn7Q+t5zeyKIZ~s",
|
||||
"tables": [
|
||||
{
|
||||
"table_name": "weather_disaster_notify",
|
||||
"table_description": "天气预警消息表"
|
||||
}
|
||||
]
|
||||
}
|
39
code/java/DisasterWarning/disaster_warning.iml
Normal file
39
code/java/DisasterWarning/disaster_warning.iml
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
|
||||
<output url="file://$MODULE_DIR$/target/classes" />
|
||||
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module-library" scope="TEST">
|
||||
<library name="JUnit4">
|
||||
<CLASSES>
|
||||
<root url="jar://$MODULE_DIR$/lib/junit-4.13.1.jar!/" />
|
||||
<root url="jar://$MODULE_DIR$/lib/hamcrest-core-1.3.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</orderEntry>
|
||||
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
|
||||
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.11" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.13.2" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.4" level="project" />
|
||||
<orderEntry type="library" name="Maven: commons-collections:commons-collections:20040616" level="project" />
|
||||
<orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
|
||||
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: net.sf.ezmorph:ezmorph:1.0.6" level="project" />
|
||||
<orderEntry type="library" name="Maven: net.sf.json-lib:json-lib:jdk15:2.4" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.8" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.8" level="project" />
|
||||
</component>
|
||||
</module>
|
392
code/java/DisasterWarning/disaster_warning.ipr
Normal file
392
code/java/DisasterWarning/disaster_warning.ipr
Normal file
@@ -0,0 +1,392 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CodeStyleManager">
|
||||
<option name="USE_DEFAULT_CODE_STYLE_SCHEME" value="true" />
|
||||
<option name="CODE_STYLE_SCHEME" value="" />
|
||||
</component>
|
||||
<component name="CompilerConfiguration">
|
||||
<wildcardResourcePatterns>
|
||||
<entry name="!?*.java" />
|
||||
</wildcardResourcePatterns>
|
||||
<annotationProcessing>
|
||||
<profile name="Maven default annotation processors profile" enabled="true">
|
||||
<sourceOutputDir name="target/generated-sources/annotations" />
|
||||
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
|
||||
<outputRelativeToContentRoot value="true" />
|
||||
<module name="disaster_warning" />
|
||||
</profile>
|
||||
</annotationProcessing>
|
||||
<bytecodeTargetLevel>
|
||||
<module name="disaster_warning" target="1.8" />
|
||||
</bytecodeTargetLevel>
|
||||
</component>
|
||||
<component name="Encoding" native2AsciiForPropertiesFiles="true" defaultCharsetForPropertiesFiles="UTF-8">
|
||||
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
|
||||
<file url="PROJECT" charset="UTF-8" />
|
||||
</component>
|
||||
<component name="ExportToHTMLSettings">
|
||||
<option name="PRINT_LINE_NUMBERS" value="false" />
|
||||
<option name="OPEN_IN_BROWSER" value="false" />
|
||||
<option name="OUTPUT_DIRECTORY" />
|
||||
</component>
|
||||
<component name="ImportConfiguration">
|
||||
<option name="VENDOR" />
|
||||
<option name="RELEASE_TAG" />
|
||||
<option name="LOG_MESSAGE" />
|
||||
<option name="CHECKOUT_AFTER_IMPORT" value="true" />
|
||||
</component>
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
</profile>
|
||||
<version value="1.0" />
|
||||
</component>
|
||||
<component name="JUnitGeneratorProjectSettings">
|
||||
<option name="selectedTemplateKey" value="JUnit 4" />
|
||||
<option name="vmTemplates">
|
||||
<map>
|
||||
<entry key="JUnit 3" value="######################################################################################## ## ## Available variables: ## $entryList.methodList - List of method composites ## $entryList.privateMethodList - List of private method composites ## $entryList.fieldList - ArrayList of class scope field names ## $entryList.className - class name ## $entryList.packageName - package name ## $today - Todays date in MM/dd/yyyy format ## ## MethodComposite variables: ## $method.name - Method Name ## $method.signature - Full method signature in String form ## $method.reflectionCode - list of strings representing commented out reflection code to access method (Private Methods) ## $method.paramNames - List of Strings representing the method's parameters' names ## $method.paramClasses - List of Strings representing the method's parameters' classes ## ## You can configure the output class name using "testClass" variable below. ## Here are some examples: ## Test${entry.ClassName} - will produce TestSomeClass ## ${entry.className}Test - will produce SomeClassTest ## ######################################################################################## ## #macro (cap $strIn)$strIn.valueOf($strIn.charAt(0)).toUpperCase()$strIn.substring(1)#end ## Iterate through the list and generate testcase for every entry. #foreach ($entry in $entryList) #set( $testClass="${entry.className}Test") ## package test.$entry.packageName; import junit.framework.Test; import junit.framework.TestSuite; import junit.framework.TestCase; /** * ${entry.className} Tester. * * @author <Authors name> * @since <pre>$today</pre> * @version 1.0 */ public class $testClass extends TestCase { public $testClass(String name) { super(name); } public void setUp() throws Exception { super.setUp(); } public void tearDown() throws Exception { super.tearDown(); } #foreach($method in $entry.methodList) /** * * Method: $method.signature * */ public void test#cap(${method.name})() throws Exception { //TODO: Test goes here... } #end #foreach($method in $entry.privateMethodList) /** * * Method: $method.signature * */ public void test#cap(${method.name})() throws Exception { //TODO: Test goes here... #foreach($string in $method.reflectionCode) $string #end } #end public static Test suite() { return new TestSuite(${testClass}.class); } } #end" />
|
||||
<entry key="JUnit 4" value="######################################################################################## ## ## Available variables: ## $entryList.methodList - List of method composites ## $entryList.privateMethodList - List of private method composites ## $entryList.fieldList - ArrayList of class scope field names ## $entryList.className - class name ## $entryList.packageName - package name ## $today - Todays date in MM/dd/yyyy format ## ## MethodComposite variables: ## $method.name - Method Name ## $method.signature - Full method signature in String form ## $method.reflectionCode - list of strings representing commented out reflection code to access method (Private Methods) ## $method.paramNames - List of Strings representing the method's parameters' names ## $method.paramClasses - List of Strings representing the method's parameters' classes ## ## You can configure the output class name using "testClass" variable below. ## Here are some examples: ## Test${entry.ClassName} - will produce TestSomeClass ## ${entry.className}Test - will produce SomeClassTest ## ######################################################################################## ## #macro (cap $strIn)$strIn.valueOf($strIn.charAt(0)).toUpperCase()$strIn.substring(1)#end ## Iterate through the list and generate testcase for every entry. #foreach ($entry in $entryList) #set( $testClass="${entry.className}Test") ## package $entry.packageName; import org.junit.Test; import org.junit.Before; import org.junit.After; /** * ${entry.className} Tester. * * @author <Authors name> * @since <pre>$date</pre> * @version 1.0 */ public class $testClass { @Before public void before() throws Exception { } @After public void after() throws Exception { } #foreach($method in $entry.methodList) /** * * Method: $method.signature * */ @Test public void test#cap(${method.name})() throws Exception { //TODO: Test goes here... } #end #foreach($method in $entry.privateMethodList) /** * * Method: $method.signature * */ @Test public void test#cap(${method.name})() throws Exception { //TODO: Test goes here... #foreach($string in $method.reflectionCode) $string #end } #end } #end" />
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
<component name="JUnitProjectSettings">
|
||||
<option name="TEST_RUNNER" value="UI" />
|
||||
</component>
|
||||
<component name="JavadocGenerationManager">
|
||||
<option name="OPTION_HIERARCHY" value="false" />
|
||||
<option name="OPTION_NAVIGATOR" value="false" />
|
||||
<option name="OPTION_INDEX" value="false" />
|
||||
<option name="OPTION_SEPARATE_INDEX" value="false" />
|
||||
<option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="false" />
|
||||
<option name="OPTION_DEPRECATED_LIST" value="false" />
|
||||
<option name="OPEN_IN_BROWSER" value="false" />
|
||||
</component>
|
||||
<component name="JikesSettings">
|
||||
<option name="DEBUGGING_INFO" value="true" />
|
||||
<option name="DEPRECATION" value="true" />
|
||||
<option name="GENERATE_NO_WARNINGS" value="false" />
|
||||
<option name="GENERATE_MAKE_FILE_DEPENDENCIES" value="false" />
|
||||
<option name="DO_FULL_DEPENDENCE_CHECK" value="false" />
|
||||
<option name="IS_INCREMENTAL_MODE" value="false" />
|
||||
<option name="IS_EMACS_ERRORS_MODE" value="true" />
|
||||
<option name="ADDITIONAL_OPTIONS_STRING" value="" />
|
||||
<option name="MAXIMUM_HEAP_SIZE" value="128" />
|
||||
</component>
|
||||
<component name="MavenProjectsManager">
|
||||
<option name="originalFiles">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/pom.xml" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="Palette2">
|
||||
<group name="Swing">
|
||||
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
|
||||
</item>
|
||||
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
|
||||
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
|
||||
<initial-values>
|
||||
<property name="text" value="Button" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="RadioButton" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="CheckBox" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="Label" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||
<preferred-size width="200" height="200" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||
<preferred-size width="200" height="200" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
|
||||
<preferred-size width="-1" height="20" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
|
||||
</item>
|
||||
</group>
|
||||
</component>
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/disaster_warning.iml" filepath="$PROJECT_DIR$/disaster_warning.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="1.8" />
|
||||
<component name="RemoteRepositoriesConfiguration">
|
||||
<remote-repository>
|
||||
<option name="id" value="central" />
|
||||
<option name="name" value="Central Repository" />
|
||||
<option name="url" value="https://repo.maven.apache.org/maven2" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="central" />
|
||||
<option name="name" value="Maven Central repository" />
|
||||
<option name="url" value="https://repo1.maven.org/maven2" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="jboss.community" />
|
||||
<option name="name" value="JBoss Community repository" />
|
||||
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
|
||||
</remote-repository>
|
||||
</component>
|
||||
<component name="SwUserDefinedSpecifications">
|
||||
<option name="specTypeByUrl">
|
||||
<map />
|
||||
</option>
|
||||
</component>
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
|
||||
</component>
|
||||
<component name="libraryTable">
|
||||
<library name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.8">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.9.8/jackson-annotations-2.9.8.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.9.8/jackson-annotations-2.9.8-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.9.8/jackson-annotations-2.9.8-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.8">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.9.8/jackson-core-2.9.8.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.9.8/jackson-core-2.9.8-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.9.8/jackson-core-2.9.8-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.9.8/jackson-databind-2.9.8.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.9.8/jackson-databind-2.9.8-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.9.8/jackson-databind-2.9.8-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: commons-beanutils:commons-beanutils:1.9.4">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.4/commons-beanutils-1.9.4.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.4/commons-beanutils-1.9.4-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.4/commons-beanutils-1.9.4-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: commons-codec:commons-codec:1.11">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.11/commons-codec-1.11.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.11/commons-codec-1.11-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.11/commons-codec-1.11-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: commons-collections:commons-collections:20040616">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/commons-collections/commons-collections/20040616/commons-collections-20040616.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/commons-collections/commons-collections/20040616/commons-collections-20040616-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/commons-collections/commons-collections/20040616/commons-collections-20040616-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: commons-lang:commons-lang:2.6">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/commons-lang/commons-lang/2.6/commons-lang-2.6.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/commons-lang/commons-lang/2.6/commons-lang-2.6-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/commons-lang/commons-lang/2.6/commons-lang-2.6-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: commons-logging:commons-logging:1.1.1">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: junit:junit:4.13.2">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.13.2/junit-4.13.2.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.13.2/junit-4.13.2-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.13.2/junit-4.13.2-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: net.sf.ezmorph:ezmorph:1.0.6">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/net/sf/ezmorph/ezmorph/1.0.6/ezmorph-1.0.6.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/net/sf/ezmorph/ezmorph/1.0.6/ezmorph-1.0.6-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/net/sf/ezmorph/ezmorph/1.0.6/ezmorph-1.0.6-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: net.sf.json-lib:json-lib:jdk15:2.4">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/net/sf/json-lib/json-lib/2.4/json-lib-2.4-jdk15.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/net/sf/json-lib/json-lib/2.4/json-lib-2.4-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/net/sf/json-lib/json-lib/2.4/json-lib-2.4-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.apache.httpcomponents:httpclient:4.5.13">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.apache.httpcomponents:httpcore:4.4.13">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpcore/4.4.13/httpcore-4.4.13-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
<library name="Maven: org.hamcrest:hamcrest-core:1.3">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-javadoc.jar!/" />
|
||||
</JAVADOC>
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
||||
</project>
|
10
code/java/DisasterWarning/logging.properties
Normal file
10
code/java/DisasterWarning/logging.properties
Normal file
@@ -0,0 +1,10 @@
|
||||
|
||||
handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler
|
||||
|
||||
.level = INFO
|
||||
|
||||
java.util.logging.FileHandler.pattern = ./logs/log_%u.log
|
||||
java.util.logging.FileHandler.limit = 50000
|
||||
java.util.logging.FileHandler.count = 1
|
||||
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
|
||||
java.util.logging.FileHandler.append = true;
|
100
code/java/DisasterWarning/pom.xml
Normal file
100
code/java/DisasterWarning/pom.xml
Normal file
@@ -0,0 +1,100 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.cpic.xim</groupId>
|
||||
<artifactId>disaster_warning</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.oracle</groupId>
|
||||
<artifactId>ojdbc8</artifactId>
|
||||
<version>19.3.0.0.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpclient</artifactId>
|
||||
<version>4.5.13</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.13.2</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-core</artifactId>
|
||||
<version>2.9.8</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
<version>2.9.8</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-annotations</artifactId>
|
||||
<version>2.9.8</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<properties>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
||||
</properties>
|
||||
<build>
|
||||
<defaultGoal>compile</defaultGoal>
|
||||
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>3.0.0-M6</version>
|
||||
<configuration>
|
||||
<skipTests>true</skipTests>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<configuration>
|
||||
<descriptorRefs>
|
||||
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||
</descriptorRefs>
|
||||
<archive>
|
||||
<manifest>
|
||||
<mainClass>AppMain</mainClass>
|
||||
</manifest>
|
||||
</archive>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>make-assmenbly</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>dev</id>
|
||||
<properties></properties>
|
||||
<activation>
|
||||
<activeByDefault>true</activeByDefault>
|
||||
</activation>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>test</id>
|
||||
<properties></properties>
|
||||
<activation>
|
||||
<activeByDefault>false</activeByDefault>
|
||||
</activation>
|
||||
</profile>
|
||||
</profiles>
|
||||
</project>
|
174
code/java/DisasterWarning/src/main/java/AppMain.java
Normal file
174
code/java/DisasterWarning/src/main/java/AppMain.java
Normal file
@@ -0,0 +1,174 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2022-04-22 10:53:49
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2022-05-10 19:03:56
|
||||
* @FilePath: \DisasterWarning\src\main\java\AppMain.java
|
||||
* @Description: 和风天气预警推送厦门太保公众号主程序!
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
import com.cpic.xim.config.AppConfigManager;
|
||||
import com.cpic.xim.config.City;
|
||||
import com.cpic.xim.notify.disaster.QWeatherDisasterWarning;
|
||||
import com.cpic.xim.notify.disaster.QWeatherDisasterWarningItem;
|
||||
import com.cpic.xim.notify.disaster.WeatherDisasterWarningGrabber;
|
||||
import com.cpic.xim.wechat.officalAccount.sendMessage;
|
||||
import com.cpic.xim.config.WeatherDisasterNotifyConfig;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Vector;
|
||||
import java.util.logging.*;
|
||||
|
||||
|
||||
public class AppMain
|
||||
{
|
||||
// private final static String LOG_FILE_PATH = "./logs/app%u.log";
|
||||
|
||||
public static void main( String[] args )
|
||||
{
|
||||
String json;
|
||||
WeatherDisasterNotifyConfig config = null;
|
||||
QWeatherDisasterWarning warning = null;
|
||||
Logger logger = null;
|
||||
|
||||
// 配置logger
|
||||
try
|
||||
{
|
||||
setRootLogger();
|
||||
|
||||
logger = Logger.getLogger( "com.cpicxim" );
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
System.out.println( "配置logger失败,原因:" + error.getMessage() );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// 读取配置
|
||||
try
|
||||
{
|
||||
config = AppConfigManager.getConfig();
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
System.out.println( "读取配置文件失败!" );
|
||||
System.out.println( error.getMessage() );
|
||||
|
||||
logger.log( Level.SEVERE, "读取配置文件失败:{0}", error.getMessage() );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Vector<City> cities = config.getCities();
|
||||
String queryURL = config.getQueryUrl();
|
||||
String userKey = config.getKey();
|
||||
|
||||
// 遍历所有城市,查询是否有警报,有则推送。
|
||||
while (true)
|
||||
{
|
||||
for ( City city : cities )
|
||||
{
|
||||
try
|
||||
{
|
||||
json = WeatherDisasterWarningGrabber.getWeatherDisasterWarningJSON( queryURL,
|
||||
userKey, city.getCityCode() );
|
||||
warning = WeatherDisasterWarningGrabber.convertWeatherDisasterWarning( json );
|
||||
|
||||
logger.log( Level.INFO, "查询{0}天气预警,结果:{1}。", new Object[]
|
||||
{ city.getCityName(), json} );
|
||||
|
||||
Vector<QWeatherDisasterWarningItem> warningItems = warning.getWarning();
|
||||
|
||||
// 判断是否有警报,没有警报就结束当前城市的处理
|
||||
if ( warningItems.isEmpty() == true)
|
||||
{
|
||||
logger.log( Level.INFO, "查询{0}天气预警,无警报!。", new Object[]
|
||||
{ city.getCityName()} );
|
||||
continue;
|
||||
}
|
||||
|
||||
// 有警报,就遍历警报数组
|
||||
for ( QWeatherDisasterWarningItem item : warningItems )
|
||||
{
|
||||
// 先检查是否已经发送过
|
||||
if ( sendMessage.checkWarningHasSended( item.getId() ) == false)
|
||||
{
|
||||
logger.log( Level.INFO, "查询{0}天气预警,ID:{1},已有发送记录,跳过。", new Object[]
|
||||
{ city.getCityName(), item.getId()} );
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// 没有发送过
|
||||
logger.log( Level.INFO, "查询{0}天气预警,发送日志。", new Object[]
|
||||
{ city.getCityName()} );
|
||||
|
||||
sendMessage.sendWeatherDisasterWarning( config.getWechatOfficalAccountURL(),
|
||||
item );
|
||||
|
||||
logger.log( Level.INFO, "{0}天气预警,日志发送成功。", new Object[]
|
||||
{ city.getCityName()} );
|
||||
}
|
||||
|
||||
// 将发送的警报,保存起来
|
||||
sendMessage.saveWeatherDisasterWarning( city.getCityName(), warning );
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
System.out.println( "查询" + city.getCityName() + "出现异常!" );
|
||||
System.out.println( error.getMessage() );
|
||||
|
||||
logger.log( Level.SEVERE, "查询 {0} 出现异常:{1}。", new Object[]
|
||||
{ city.getCityName(), error.getMessage()} );
|
||||
}
|
||||
catch ( SQLException error )
|
||||
{
|
||||
logger.log( Level.SEVERE, "查询 {0} 写入数据库失败:{1}。", new Object[]
|
||||
{ city.getCityName(), error.getMessage()} );
|
||||
}
|
||||
catch ( ClassNotFoundException error )
|
||||
{
|
||||
logger.log( Level.SEVERE, "查询 {0} 加载oracle驱动失败:{1}。", new Object[]
|
||||
{ city.getCityName(), error.getMessage()} );
|
||||
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
logger.log( Level.SEVERE, "查询 {0} 出现未知错误:{1}。", new Object[]
|
||||
{ city.getCityName(), error.getMessage()} );
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
logger.log( Level.INFO, "查询结束,休眠{0}分钟。", config.getQueryInterval() );
|
||||
Thread.sleep( config.getQueryInterval() * 1000 * 60 );
|
||||
}
|
||||
catch ( InterruptedException error )
|
||||
{
|
||||
logger.log( Level.SEVERE, "线程休眠异常,错误信息:{0}", new Object[]
|
||||
{ error.getMessage()} );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置JUL的logger。
|
||||
*/
|
||||
private static void setRootLogger() throws IOException
|
||||
{
|
||||
LogManager logManager = LogManager.getLogManager();
|
||||
// 使用外部的配置文件。
|
||||
FileInputStream configFile = new FileInputStream( "./logging.properties" );
|
||||
// 使用jar中的配置文件。
|
||||
// InputStream configFile =
|
||||
// AppMain.class.getClassLoader().getResourceAsStream( "logging.properties" );
|
||||
|
||||
logManager.readConfiguration( configFile );
|
||||
|
||||
Logger.getLogger( "com.cpicxim" );
|
||||
}
|
||||
}
|
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2022-05-10 16:06:14
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2022-05-10 16:09:07
|
||||
* @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\config\AppConfigManager.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
|
||||
package com.cpic.xim.config;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.FileInputStream;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
|
||||
|
||||
public class AppConfigManager
|
||||
{
|
||||
private static final int BUFFER_SIZE = 1024;
|
||||
private static final String CONFIG_FILE_CHARSET = "UTF-8";
|
||||
private static final String CONFIG_FILE_PATH = "./config.json";
|
||||
private static WeatherDisasterNotifyConfig appConfig = null;
|
||||
|
||||
public static WeatherDisasterNotifyConfig getConfig() throws IOException
|
||||
|
||||
{
|
||||
if ( appConfig != null)
|
||||
{
|
||||
return appConfig;
|
||||
}
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
FileInputStream configFile = null;
|
||||
InputStreamReader in = null;
|
||||
StringBuffer json = null;
|
||||
char[] buffer = new char[BUFFER_SIZE];
|
||||
|
||||
// 设置json属性
|
||||
mapper.setPropertyNamingStrategy( PropertyNamingStrategy.SNAKE_CASE );
|
||||
|
||||
try
|
||||
{
|
||||
configFile = new FileInputStream( CONFIG_FILE_PATH );
|
||||
in = new InputStreamReader( configFile, CONFIG_FILE_CHARSET );
|
||||
json = new StringBuffer();
|
||||
|
||||
int length = in.read( buffer );
|
||||
|
||||
while (length != -1)
|
||||
{
|
||||
json.append( buffer );
|
||||
|
||||
length = in.read( buffer );
|
||||
}
|
||||
|
||||
appConfig = mapper.readValue( json.toString(), WeatherDisasterNotifyConfig.class );
|
||||
}
|
||||
finally
|
||||
{
|
||||
if ( configFile != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
configFile.close();
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return appConfig;
|
||||
}
|
||||
}
|
@@ -0,0 +1,52 @@
|
||||
package com.cpic.xim.config;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class City
|
||||
{
|
||||
public City() {}
|
||||
|
||||
public String getCityName()
|
||||
{
|
||||
return cityName;
|
||||
}
|
||||
|
||||
public void setCityName( String cityName )
|
||||
{
|
||||
this.cityName = cityName;
|
||||
}
|
||||
|
||||
public String getCityCode()
|
||||
{
|
||||
return cityCode;
|
||||
}
|
||||
|
||||
public void setCityCode( String cityCode )
|
||||
{
|
||||
this.cityCode = cityCode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object o )
|
||||
{
|
||||
if ( this == o )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if ( o == null || getClass() != o.getClass() )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
City city = (City) o;
|
||||
return cityName.equals( city.cityName ) && cityCode.equals( city.cityCode );
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
return Objects.hash( cityName, cityCode );
|
||||
}
|
||||
|
||||
private String cityName;
|
||||
private String cityCode;
|
||||
}
|
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2022-04-22 17:33:30
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2022-04-23 23:50:45
|
||||
* @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\config\CpicxmStuff.java
|
||||
* @Description: 产险厦门分公司人员信息
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
|
||||
package com.cpic.xim.config;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class CpicxmStuff
|
||||
{
|
||||
public CpicxmStuff()
|
||||
{};
|
||||
|
||||
public String getStuffName()
|
||||
{
|
||||
return stuffName;
|
||||
}
|
||||
|
||||
public void setStuffName( String stuffName )
|
||||
{
|
||||
this.stuffName = stuffName;
|
||||
}
|
||||
|
||||
public String getMobilePhone()
|
||||
{
|
||||
return mobilePhone;
|
||||
}
|
||||
|
||||
public void setMobilePhone( String mobilePhone )
|
||||
{
|
||||
this.mobilePhone = mobilePhone;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object o )
|
||||
{
|
||||
if ( this == o)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if ( !(o instanceof CpicxmStuff))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
CpicxmStuff that = (CpicxmStuff) o;
|
||||
return stuffName.equals( that.stuffName ) && mobilePhone.equals( that.mobilePhone );
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
return Objects.hash( stuffName, mobilePhone );
|
||||
}
|
||||
|
||||
private String stuffName;
|
||||
private String mobilePhone;
|
||||
}
|
@@ -0,0 +1,116 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2022-04-24 10:21:46
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2022-05-10 16:16:28
|
||||
* @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\config\WeatherDisasterNotifyConfig.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.config;
|
||||
|
||||
import java.util.Vector;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
|
||||
public class WeatherDisasterNotifyConfig
|
||||
{
|
||||
|
||||
public WeatherDisasterNotifyConfig()
|
||||
{};
|
||||
|
||||
public String getTitle()
|
||||
{
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle( String title )
|
||||
{
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public String getKey()
|
||||
{
|
||||
return key;
|
||||
}
|
||||
|
||||
public void setKey( String key )
|
||||
{
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
public String getQueryUrl()
|
||||
{
|
||||
return queryUrl;
|
||||
}
|
||||
|
||||
public void setQueryUrl( String queryUrl )
|
||||
{
|
||||
this.queryUrl = queryUrl;
|
||||
}
|
||||
|
||||
public Vector<City> getCities()
|
||||
{
|
||||
return cities;
|
||||
}
|
||||
|
||||
|
||||
public int getQueryInterval()
|
||||
{
|
||||
return queryInterval;
|
||||
}
|
||||
|
||||
public void setQueryInterval( int queryInterval )
|
||||
{
|
||||
this.queryInterval = queryInterval;
|
||||
}
|
||||
|
||||
|
||||
public void setCities( Vector<City> cities )
|
||||
{
|
||||
this.cities = cities;
|
||||
}
|
||||
|
||||
public Vector<CpicxmStuff> getNotifyStuffs()
|
||||
{
|
||||
return notifyStuffs;
|
||||
}
|
||||
|
||||
public void setNotifyStuffs( Vector<CpicxmStuff> notifyStuffs )
|
||||
{
|
||||
this.notifyStuffs = notifyStuffs;
|
||||
}
|
||||
|
||||
public String getWechatOfficalAccountURL()
|
||||
{
|
||||
return wechatOfficalAccountURL;
|
||||
}
|
||||
|
||||
public void setWechatOfficalAccountURL( String wechatOfficalAccountURL )
|
||||
{
|
||||
this.wechatOfficalAccountURL = wechatOfficalAccountURL;
|
||||
}
|
||||
|
||||
@JsonProperty( "title")
|
||||
private String title;
|
||||
|
||||
@JsonProperty( "key")
|
||||
private String key;
|
||||
|
||||
@JsonProperty( "query_url")
|
||||
private String queryUrl;
|
||||
|
||||
@JsonProperty( "query_interval")
|
||||
private int queryInterval;
|
||||
|
||||
@JsonProperty( "wechat_officalaccount_url")
|
||||
private String wechatOfficalAccountURL;
|
||||
|
||||
@JsonProperty( "cities")
|
||||
private Vector<City> cities;
|
||||
|
||||
@JsonProperty( "notify_stuffs")
|
||||
private Vector<CpicxmStuff> notifyStuffs;
|
||||
}
|
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2022-04-22 17:33:30
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2022-04-27 16:53:13
|
||||
* @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\config\db\DBTable.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.config.db;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
public class DBTable
|
||||
{
|
||||
public DBTable()
|
||||
{}
|
||||
|
||||
public String getTableName()
|
||||
{
|
||||
return tableName;
|
||||
}
|
||||
|
||||
public void setTableName( String tableName )
|
||||
{
|
||||
this.tableName = tableName;
|
||||
}
|
||||
|
||||
public String getTableDescription()
|
||||
{
|
||||
return tableDescription;
|
||||
}
|
||||
|
||||
public void setTableDescription( String tableDescription )
|
||||
{
|
||||
this.tableDescription = tableDescription;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object o )
|
||||
{
|
||||
if ( this == o)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if ( !(o instanceof DBTable))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
DBTable dbTable = (DBTable) o;
|
||||
return tableName.equals( dbTable.tableName )
|
||||
&& tableDescription.equals( dbTable.tableDescription );
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
return Objects.hash( tableName, tableDescription );
|
||||
}
|
||||
|
||||
@JsonProperty( "table_name")
|
||||
private String tableName;
|
||||
|
||||
@JsonProperty( "table_description")
|
||||
private String tableDescription;
|
||||
}
|
@@ -0,0 +1,113 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2022-04-22 17:33:30
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2022-04-25 21:33:07
|
||||
* @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\config\db\OracleConfig.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.config.db;
|
||||
|
||||
import java.util.Vector;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
/**
|
||||
* @Description oracle数据库相关参数对象。
|
||||
*/
|
||||
public class OracleConfig
|
||||
{
|
||||
|
||||
public String getTnsName()
|
||||
{
|
||||
return tnsName;
|
||||
}
|
||||
|
||||
public void setTnsName( String tnsName )
|
||||
{
|
||||
this.tnsName = tnsName;
|
||||
}
|
||||
|
||||
public String getIpAddr()
|
||||
{
|
||||
return ipAddr;
|
||||
}
|
||||
|
||||
public void setIpAddr( String ipAddr )
|
||||
{
|
||||
this.ipAddr = ipAddr;
|
||||
}
|
||||
|
||||
public String getJdbcURL()
|
||||
{
|
||||
return jdbcURL;
|
||||
}
|
||||
|
||||
public void setJdbcURL( String jdbcURL )
|
||||
{
|
||||
this.jdbcURL = jdbcURL;
|
||||
}
|
||||
|
||||
|
||||
public String getTableSpace()
|
||||
{
|
||||
return tableSpace;
|
||||
}
|
||||
|
||||
public void setTableSpace( String tableSpace )
|
||||
{
|
||||
this.tableSpace = tableSpace;
|
||||
}
|
||||
|
||||
public String getUserName()
|
||||
{
|
||||
return userName;
|
||||
}
|
||||
|
||||
public void setUserName( String userName )
|
||||
{
|
||||
this.userName = userName;
|
||||
}
|
||||
|
||||
public String getPassword()
|
||||
{
|
||||
return password;
|
||||
}
|
||||
|
||||
public void setPassword( String password )
|
||||
{
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
public Vector<DBTable> getTables()
|
||||
{
|
||||
return tables;
|
||||
}
|
||||
|
||||
public void setTables( Vector<DBTable> tables )
|
||||
{
|
||||
this.tables = tables;
|
||||
}
|
||||
|
||||
@JsonProperty( "tns_name")
|
||||
private String tnsName;
|
||||
|
||||
@JsonProperty( "ip_addr")
|
||||
private String ipAddr;
|
||||
|
||||
@JsonProperty( "jdbc_url")
|
||||
private String jdbcURL;
|
||||
|
||||
@JsonProperty( "table_space")
|
||||
private String tableSpace;
|
||||
|
||||
@JsonProperty( "user_name")
|
||||
private String userName;
|
||||
|
||||
@JsonProperty( "password")
|
||||
private String password;
|
||||
|
||||
@JsonProperty( "tables")
|
||||
private Vector<DBTable> tables;
|
||||
}
|
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2022-04-25 21:45:12
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2022-05-03 22:34:37
|
||||
* @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\config\db\OracleConfigManager.java
|
||||
* @Description: oracle数据库配置文件加载类
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.config.db;
|
||||
|
||||
import java.io.*;
|
||||
|
||||
import com.fasterxml.jackson.databind.*;
|
||||
|
||||
public class OracleConfigManager
|
||||
{
|
||||
private static final String CONFIG_FILE_PATH = "./db.json";
|
||||
private static final String CONFIG_FILE_CHARSET = "UTF-8";
|
||||
private static final int BUFFER_SIZE = 1024;
|
||||
private static OracleConfig dbConfig = null;
|
||||
|
||||
private OracleConfigManager()
|
||||
{}
|
||||
|
||||
public static OracleConfig getOracleConfig() throws IOException
|
||||
{
|
||||
FileInputStream file = null;
|
||||
InputStreamReader in = null;
|
||||
StringBuffer json = null;
|
||||
char[] buffer = new char[BUFFER_SIZE];
|
||||
|
||||
if ( dbConfig != null)
|
||||
{
|
||||
return dbConfig;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
file = new FileInputStream( CONFIG_FILE_PATH );
|
||||
in = new InputStreamReader( file, CONFIG_FILE_CHARSET );
|
||||
json = new StringBuffer();
|
||||
|
||||
int count = in.read( buffer );
|
||||
|
||||
while (count != -1)
|
||||
{
|
||||
json.append( buffer );
|
||||
|
||||
count = in.read( buffer );
|
||||
}
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
dbConfig = mapper.readValue( json.toString(), OracleConfig.class );
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
throw error;
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
file.close();
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return dbConfig;
|
||||
}
|
||||
}
|
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2022-04-22 09:54:05
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2022-04-22 16:18:17
|
||||
* @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\httpUtil\HttpUtils.java
|
||||
* @Description: http相关的工具类。
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.httpUtil;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.net.URL;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.MalformedURLException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
/**
|
||||
* Http相关的工具类。
|
||||
*/
|
||||
public class HttpUtils
|
||||
{
|
||||
/**
|
||||
* 以POST方式发送http请求!
|
||||
* @param url 访问的链接字符串
|
||||
* @param headers 请求头部参数集合
|
||||
* @param params 请求体字符串
|
||||
*/
|
||||
public static String postHttpRequest( String url, HashMap<String, String> headers,
|
||||
String param ) throws MalformedURLException
|
||||
{
|
||||
URL httpURL = null;
|
||||
HttpURLConnection conn = null;
|
||||
OutputStreamWriter out = null;
|
||||
BufferedReader in = null;
|
||||
StringBuilder result = new StringBuilder();
|
||||
|
||||
try
|
||||
{
|
||||
// 获取connection
|
||||
httpURL = new URL( url );
|
||||
conn = (HttpURLConnection) httpURL.openConnection();
|
||||
|
||||
// 设置请求方式
|
||||
conn.setRequestMethod( "POST" );
|
||||
|
||||
// 设置请求头参数
|
||||
for ( HashMap.Entry<String, String> head : headers.entrySet())
|
||||
{
|
||||
conn.setRequestProperty( head.getKey(), head.getValue() );
|
||||
}
|
||||
|
||||
// 连接
|
||||
conn.setDoInput( true );
|
||||
conn.setDoOutput( true );
|
||||
conn.connect();
|
||||
|
||||
// 输出请求
|
||||
out = new OutputStreamWriter( conn.getOutputStream(), StandardCharsets.UTF_8 );
|
||||
out.write( param );
|
||||
out.flush();
|
||||
|
||||
// 读取返回值。
|
||||
in = new BufferedReader( new InputStreamReader( conn.getInputStream() ) );
|
||||
|
||||
String line = in.readLine();
|
||||
|
||||
while (line != null)
|
||||
{
|
||||
result.append( line );
|
||||
|
||||
line = in.readLine();
|
||||
}
|
||||
}
|
||||
catch (IOException error)
|
||||
{
|
||||
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
if ( out != null)
|
||||
{
|
||||
out.close();
|
||||
}
|
||||
|
||||
if ( in != null)
|
||||
{
|
||||
in.close();
|
||||
}
|
||||
|
||||
if ( conn != null)
|
||||
{
|
||||
conn.disconnect();
|
||||
}
|
||||
}
|
||||
catch (Exception error)
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
return result.toString();
|
||||
}
|
||||
}
|
@@ -0,0 +1,88 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2022-04-24 10:21:46
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2022-04-24 11:28:58
|
||||
* @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\notify\disaster\QWeatherDisasterWarning.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.notify.disaster;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Vector;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
public class QWeatherDisasterWarning
|
||||
{
|
||||
public QWeatherDisasterWarning()
|
||||
{}
|
||||
|
||||
public String getCode()
|
||||
{
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode( String code )
|
||||
{
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public Date getUpdateTime()
|
||||
{
|
||||
return updateTime;
|
||||
}
|
||||
|
||||
public void setUpdateTime( Date updateTime )
|
||||
{
|
||||
this.updateTime = updateTime;
|
||||
}
|
||||
|
||||
public String getFxLink()
|
||||
{
|
||||
return fxLink;
|
||||
}
|
||||
|
||||
public void setFxLink( String fxLink )
|
||||
{
|
||||
this.fxLink = fxLink;
|
||||
}
|
||||
|
||||
public Vector<QWeatherDisasterWarningItem> getWarning()
|
||||
{
|
||||
return warning;
|
||||
}
|
||||
|
||||
public void setWarning( Vector<QWeatherDisasterWarningItem> warning )
|
||||
{
|
||||
this.warning = warning;
|
||||
}
|
||||
|
||||
public QWeatherDisasterWarningRefer getRefer()
|
||||
{
|
||||
return refer;
|
||||
}
|
||||
|
||||
public void setRefer( QWeatherDisasterWarningRefer refer )
|
||||
{
|
||||
this.refer = refer;
|
||||
}
|
||||
|
||||
@JsonProperty( "code")
|
||||
private String code;
|
||||
|
||||
@JsonProperty( "updateTime")
|
||||
@JsonFormat( pattern = "yyyy-MM-dd\'T\'HH:mmXXX")
|
||||
private Date updateTime;
|
||||
|
||||
@JsonProperty( "fxLink")
|
||||
private String fxLink;
|
||||
|
||||
@JsonProperty( "warning")
|
||||
private Vector<QWeatherDisasterWarningItem> warning;
|
||||
|
||||
@JsonProperty( "refer")
|
||||
private QWeatherDisasterWarningRefer refer;
|
||||
}
|
@@ -0,0 +1,197 @@
|
||||
package com.cpic.xim.notify.disaster;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Objects;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
//import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
|
||||
public class QWeatherDisasterWarningItem
|
||||
{
|
||||
public QWeatherDisasterWarningItem()
|
||||
{}
|
||||
|
||||
public QWeatherDisasterWarningItem( String id, String sender, Date pubTime, String title,
|
||||
String status, String level, String type, String typeName, String text, String related,
|
||||
String urgency, String certainty)
|
||||
{
|
||||
this.id = id;
|
||||
this.sender = sender;
|
||||
this.pubTime = pubTime;
|
||||
this.title = title;
|
||||
this.status = status;
|
||||
this.level = level;
|
||||
this.type = type;
|
||||
this.typeName = typeName;
|
||||
this.text = text;
|
||||
this.related = related;
|
||||
this.urgency = urgency;
|
||||
this.certainty = certainty;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals( Object o )
|
||||
{
|
||||
if ( this == o)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if ( o == null || getClass() != o.getClass())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
QWeatherDisasterWarningItem that = (QWeatherDisasterWarningItem) o;
|
||||
return id.equals( that.id ) && Objects.equals( sender, that.sender )
|
||||
&& Objects.equals( pubTime, that.pubTime ) && Objects.equals( title, that.title )
|
||||
&& Objects.equals( status, that.status ) && Objects.equals( level, that.level )
|
||||
&& Objects.equals( type, that.type ) && Objects.equals( typeName, that.typeName )
|
||||
&& Objects.equals( text, that.text ) && Objects.equals( related, that.related )
|
||||
&& Objects.equals( urgency, that.urgency )
|
||||
&& Objects.equals( certainty, that.certainty );
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
return Objects.hash( id, sender, pubTime, title, status, level, type, typeName, text,
|
||||
related, urgency, certainty );
|
||||
}
|
||||
|
||||
public String getId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId( String id )
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getSender()
|
||||
{
|
||||
return sender;
|
||||
}
|
||||
|
||||
public void setSender( String sender )
|
||||
{
|
||||
this.sender = sender;
|
||||
}
|
||||
|
||||
public Date getPubTime()
|
||||
{
|
||||
return pubTime;
|
||||
}
|
||||
|
||||
public void setPubTime( Date pubTime )
|
||||
{
|
||||
this.pubTime = pubTime;
|
||||
}
|
||||
|
||||
public String getTitle()
|
||||
{
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle( String title )
|
||||
{
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public String getStatus()
|
||||
{
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus( String status )
|
||||
{
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public String getLevel()
|
||||
{
|
||||
return level;
|
||||
}
|
||||
|
||||
public void setLevel( String level )
|
||||
{
|
||||
this.level = level;
|
||||
}
|
||||
|
||||
public String getType()
|
||||
{
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType( String type )
|
||||
{
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getTypeName()
|
||||
{
|
||||
return typeName;
|
||||
}
|
||||
|
||||
public void setTypeName( String typeName )
|
||||
{
|
||||
this.typeName = typeName;
|
||||
}
|
||||
|
||||
public String getText()
|
||||
{
|
||||
return text;
|
||||
}
|
||||
|
||||
public void setText( String text )
|
||||
{
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public String getRelated()
|
||||
{
|
||||
return related;
|
||||
}
|
||||
|
||||
public void setRelated( String related )
|
||||
{
|
||||
this.related = related;
|
||||
}
|
||||
|
||||
public String getUrgency()
|
||||
{
|
||||
return urgency;
|
||||
}
|
||||
|
||||
public void setUrgency( String urgency )
|
||||
{
|
||||
this.urgency = urgency;
|
||||
}
|
||||
|
||||
public String getCertainty()
|
||||
{
|
||||
return certainty;
|
||||
}
|
||||
|
||||
public void setCertainty( String certainty )
|
||||
{
|
||||
this.certainty = certainty;
|
||||
}
|
||||
|
||||
private String id;
|
||||
private String sender;
|
||||
|
||||
@JsonProperty( "pubTime")
|
||||
@JsonFormat( shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd\'T\'HH:mmXXX")
|
||||
private Date pubTime;
|
||||
|
||||
private String title;
|
||||
private String status;
|
||||
private String level;
|
||||
private String type;
|
||||
private String typeName;
|
||||
private String text;
|
||||
private String related;
|
||||
private String urgency;
|
||||
private String certainty;
|
||||
}
|
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2022-03-17 21:08:09
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2022-03-18 00:30:53
|
||||
* @FilePath: \天气灾害预警\src\main\java\com\cpic\xim\disaster_warning\QWeatherDisasterWarningRefer.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.notify.disaster;
|
||||
|
||||
//import java.util.Objects;
|
||||
|
||||
public class QWeatherDisasterWarningRefer
|
||||
{
|
||||
public QWeatherDisasterWarningRefer() {}
|
||||
|
||||
public String[] getSources()
|
||||
{
|
||||
return sources;
|
||||
}
|
||||
|
||||
public void setSources( String[] sources )
|
||||
{
|
||||
this.sources = sources;
|
||||
}
|
||||
|
||||
public String[] getLicense()
|
||||
{
|
||||
return license;
|
||||
}
|
||||
|
||||
public void setLicense( String[] license )
|
||||
{
|
||||
this.license = license;
|
||||
}
|
||||
|
||||
private String[] sources;
|
||||
private String[] license;
|
||||
}
|
@@ -0,0 +1,131 @@
|
||||
/**
|
||||
* @author 王炜
|
||||
* @version 1.0
|
||||
*/
|
||||
package com.cpic.xim.notify.disaster;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.BufferedReader;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class WeatherDisasterWarningGrabber
|
||||
{
|
||||
/***
|
||||
* 从和风天气获取天气警报json字符串
|
||||
* @param cityCode 城市或区域代码
|
||||
* @return 返回警报的json字符串
|
||||
*/
|
||||
public static String getWeatherDisasterWarningJSON( String queryURL,
|
||||
String userKey,
|
||||
String cityCode )
|
||||
{
|
||||
//拼接url字符串
|
||||
String json = "";
|
||||
String requestURL = queryURL + "key=" + userKey + "&location=" + cityCode;
|
||||
|
||||
//链接用
|
||||
HttpURLConnection connection = null;
|
||||
URL url = null;
|
||||
InputStream inputStream = null;
|
||||
BufferedReader bufferedReader = null;
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
|
||||
try
|
||||
{
|
||||
url = new URL( requestURL );
|
||||
connection = (HttpURLConnection) url.openConnection();
|
||||
|
||||
connection.setRequestMethod( "GET" );
|
||||
connection.setConnectTimeout( 15000 );
|
||||
connection.setReadTimeout( 60000 );
|
||||
connection.connect();
|
||||
|
||||
//如果responseCode为200,说明访问成功!
|
||||
if ( connection.getResponseCode() == 200 )
|
||||
{
|
||||
//注意,和风使用了gzip压缩响应体
|
||||
inputStream = new GZIPInputStream( connection.getInputStream() );
|
||||
bufferedReader = new BufferedReader( new InputStreamReader( inputStream, "UTF-8" ) );
|
||||
|
||||
//读出数据
|
||||
String temp = bufferedReader.readLine();
|
||||
|
||||
while ( temp != null )
|
||||
{
|
||||
buffer.append( temp );
|
||||
|
||||
temp = bufferedReader.readLine();
|
||||
}
|
||||
|
||||
json = buffer.toString();
|
||||
}
|
||||
}
|
||||
catch ( MalformedURLException error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
System.out.println( "读取失败!" );
|
||||
}
|
||||
finally
|
||||
{
|
||||
if ( bufferedReader != null )
|
||||
{
|
||||
try
|
||||
{
|
||||
bufferedReader.close();
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
if ( inputStream != null )
|
||||
{
|
||||
try
|
||||
{
|
||||
inputStream.close();
|
||||
}
|
||||
catch ( IOException error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
if ( connection != null )
|
||||
{
|
||||
connection.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
return json;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将天气警告的json字符串转换成java对象。
|
||||
* @param json json字符串
|
||||
* @return 返回 QWeatherDisasterWarning 对象。
|
||||
* @throws IOException
|
||||
*/
|
||||
public static QWeatherDisasterWarning convertWeatherDisasterWarning( String json )
|
||||
throws IOException
|
||||
{
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
QWeatherDisasterWarning warning = mapper.readValue( json, QWeatherDisasterWarning.class );
|
||||
|
||||
return warning;
|
||||
}
|
||||
}
|
@@ -0,0 +1,437 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2022-04-22 10:53:49
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2022-05-10 19:02:32
|
||||
* @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\wechat\officalAccount\sendMessage.java
|
||||
* @Description: 用来推送公众号消息的程序库。
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.wechat.officalAccount;
|
||||
|
||||
import com.cpic.xim.config.db.OracleConfigManager;
|
||||
import com.cpic.xim.config.db.OracleConfig;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.HashMap;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import com.cpic.xim.notify.disaster.*;
|
||||
import com.cpic.xim.httpUtil.HttpUtils;
|
||||
|
||||
/**
|
||||
* 推送微信公众号消息。
|
||||
*
|
||||
* @author Kane
|
||||
*/
|
||||
public class sendMessage
|
||||
{
|
||||
private static HashMap<String, String> warningLevel;
|
||||
|
||||
/**
|
||||
* 推送天气灾害预警!接口文档参考 彭奕洁 编写《消息发送接口调用文档》
|
||||
* 使用 post 方式,请求体内容以最基础的 post 格式。
|
||||
* @param officalAccountURL 产险厦门分公司公众号接口网址
|
||||
* @param warningItem 灾害预警对象
|
||||
*/
|
||||
public static void sendWeatherDisasterWarning( String officalAccountURL,
|
||||
QWeatherDisasterWarningItem warningItem )
|
||||
{
|
||||
// Vector<QWeatherDisasterWarningItem> warningItems = warningItem.getWarning();
|
||||
StringBuilder requestBody = null;
|
||||
|
||||
// 设置请求头参数
|
||||
HashMap<String, String> headers = new HashMap<String, String>();
|
||||
|
||||
headers.put( "accept", "*/*" );
|
||||
headers.put( "Connection", "Keep-Alive" );
|
||||
headers.put( "Content-Type", "application/x-www-form-urlencoded;charset=UTF-8" );
|
||||
|
||||
// 遍历消息,将消息推送出去。
|
||||
|
||||
// 拼接消息内容
|
||||
String title = warningItem.getTitle();
|
||||
String text = warningItem.getText();
|
||||
String color = warningLevel.keySet().contains( warningItem.getLevel() )
|
||||
? warningLevel.get( warningItem.getLevel() )
|
||||
: "#000000";
|
||||
requestBody = new StringBuilder();
|
||||
|
||||
requestBody.append( "tplid=57&groupid=1&first=尊敬的#realname#,您好!&" );
|
||||
requestBody.append( "keyword1=" ).append( title ).append( "&" );
|
||||
requestBody.append( "keyword1color=" ).append( color ).append( "&" );
|
||||
requestBody.append( "keyword2=" ).append( text );
|
||||
|
||||
try
|
||||
{
|
||||
HttpUtils.postHttpRequest( officalAccountURL, headers, requestBody.toString() );
|
||||
}
|
||||
catch ( MalformedURLException error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查预警是否已经推送过,通过 QWeatherDisasterWarningItem 对象的 id 属性。
|
||||
* 查询 oracle xmcx1 数据库 wechat 表空间下 weather_disaster_notify 表,
|
||||
* 统计 warningID 的数量,如果不为0,说明该预警已经保存过,视为已经推送过。
|
||||
* @param warningID 预警的id
|
||||
* @return 如果推送过,返回false,否则返回 true。
|
||||
*/
|
||||
public static boolean checkWarningHasSended( String warningID )
|
||||
throws ClassNotFoundException, SQLException, IOException
|
||||
{
|
||||
boolean result = false;
|
||||
|
||||
OracleConfig dbConfig = OracleConfigManager.getOracleConfig();;
|
||||
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
|
||||
String jdbcURL = dbConfig.getJdbcURL();
|
||||
String userName = dbConfig.getUserName();
|
||||
String password = dbConfig.getPassword();
|
||||
String sql = "select count(*) from weather_disaster_notify where notify_id = ?";
|
||||
|
||||
// Logger logger = Logger.getLogger( "com.cpicxim.wechat.officalAccount.sendMessage" );
|
||||
|
||||
try
|
||||
{
|
||||
Class.forName( "oracle.jdbc.driver.OracleDriver" );
|
||||
|
||||
conn = DriverManager.getConnection( jdbcURL, userName, password );
|
||||
stmt = conn.prepareStatement( sql );
|
||||
stmt.setString( 1, warningID );
|
||||
|
||||
rs = stmt.executeQuery();
|
||||
|
||||
if ( rs.next() && rs.getInt( 1 ) == 0)
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
if ( rs != null)
|
||||
{
|
||||
rs.close();
|
||||
}
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if ( stmt != null)
|
||||
{
|
||||
stmt.close();
|
||||
}
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if ( conn != null)
|
||||
{
|
||||
conn.close();
|
||||
}
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存天气预警警报数据。
|
||||
* 保存至 oracle xmcx1 数据库 wechat 表空间下 weather_disaster_notify 表。
|
||||
* 保存的数据用来判断预警是否已经推送过,以防止反复推送数据。
|
||||
* @param city 城市名称
|
||||
* @param warning 预警数据,为 QWeatherDisasterWarningItem 对象。
|
||||
* @throws SQLException 执行sql时可能抛出的异常。出现sql异常,就回滚事务。
|
||||
* @throws IOException 读取数据库配置文件时可能抛出的异常。
|
||||
* @throws ClassNotFoundException 加载oracle jdbc驱动时可能抛出的异常。
|
||||
*/
|
||||
public static void saveWeatherDisasterWarning( String city, QWeatherDisasterWarning warnings )
|
||||
throws SQLException, IOException, ClassNotFoundException
|
||||
{
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
|
||||
String sql = "insert into weather_disaster_notify(notify_id, sender, city,"
|
||||
+ "warning_level, warning_type_code, warning_type_name, title,"
|
||||
+ "text, pub_time) values( ?,?,?,?,?,?,?,?,?)";
|
||||
|
||||
OracleConfig dbConfig = OracleConfigManager.getOracleConfig();
|
||||
|
||||
String jdbcURL = dbConfig.getJdbcURL();
|
||||
String userName = dbConfig.getUserName();
|
||||
String password = dbConfig.getPassword();
|
||||
|
||||
try
|
||||
{
|
||||
Class.forName( "oracle.jdbc.driver.OracleDriver" );
|
||||
|
||||
conn = DriverManager.getConnection( jdbcURL, userName, password );
|
||||
stmt = conn.prepareStatement( sql );
|
||||
|
||||
conn.setAutoCommit( false );
|
||||
|
||||
for ( QWeatherDisasterWarningItem warning : warnings.getWarning() )
|
||||
{
|
||||
java.sql.Timestamp pubTime =
|
||||
new java.sql.Timestamp( warning.getPubTime().getTime() );
|
||||
|
||||
stmt.setString( 1, warning.getId() );
|
||||
stmt.setString( 2, warning.getSender() );
|
||||
stmt.setString( 3, city );
|
||||
stmt.setString( 4, warning.getLevel() );
|
||||
stmt.setString( 5, warning.getType() );
|
||||
stmt.setString( 6, warning.getTypeName() );
|
||||
stmt.setString( 7, warning.getTitle() );
|
||||
stmt.setString( 8, warning.getText() );
|
||||
stmt.setTimestamp( 9, pubTime );
|
||||
|
||||
stmt.execute();
|
||||
}
|
||||
|
||||
// 没有问题就提交
|
||||
conn.commit();
|
||||
}
|
||||
catch ( SQLException error )
|
||||
{
|
||||
// 出现sql错误,就回滚!
|
||||
if ( conn != null)
|
||||
{
|
||||
conn.rollback();
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
if ( stmt != null)
|
||||
{
|
||||
stmt.close();
|
||||
}
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if ( conn != null)
|
||||
{
|
||||
conn.close();
|
||||
}
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
{
|
||||
// 预警级别色彩
|
||||
warningLevel = new HashMap<>();
|
||||
|
||||
warningLevel.put( "蓝色", "#0000FF" );
|
||||
warningLevel.put( "黄色", "#FFFF00" );
|
||||
warningLevel.put( "橙色", "#FFA500" );
|
||||
warningLevel.put( "红色", "#FF0000" );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class WechatOfficalAccountMessageParameter
|
||||
{
|
||||
|
||||
WechatOfficalAccountMessageParameter()
|
||||
{
|
||||
tplID = 57;
|
||||
groupID = 1;
|
||||
}
|
||||
|
||||
@JsonProperty( "tplid")
|
||||
private int tplID;
|
||||
|
||||
@JsonProperty( "groupid")
|
||||
private int groupID;
|
||||
|
||||
@JsonProperty( "first")
|
||||
private String first;
|
||||
|
||||
@JsonProperty( "keyword1")
|
||||
private String keyword1;
|
||||
|
||||
@JsonProperty( "keyword1color")
|
||||
private String keyword1Color;
|
||||
|
||||
@JsonProperty( "keyword2")
|
||||
private String keyword2;
|
||||
|
||||
@JsonProperty( "keyword2color")
|
||||
private String keyword2Color;
|
||||
|
||||
@JsonProperty( "remark")
|
||||
private String remark;
|
||||
|
||||
@JsonProperty( "remarkcolor")
|
||||
private String remarkColor;
|
||||
|
||||
@JsonProperty( "url")
|
||||
private String url;
|
||||
|
||||
@JsonProperty( "appid")
|
||||
private String appid;
|
||||
|
||||
@JsonProperty( "pagepath")
|
||||
private String pagePath;
|
||||
|
||||
public int getTplID()
|
||||
{
|
||||
return tplID;
|
||||
}
|
||||
|
||||
public void setTplID( int tplID )
|
||||
{
|
||||
this.tplID = tplID;
|
||||
}
|
||||
|
||||
public int getGroupID()
|
||||
{
|
||||
return groupID;
|
||||
}
|
||||
|
||||
public void setGroupID( int groupID )
|
||||
{
|
||||
this.groupID = groupID;
|
||||
}
|
||||
|
||||
public String getFirst()
|
||||
{
|
||||
return first;
|
||||
}
|
||||
|
||||
public void setFirst( String first )
|
||||
{
|
||||
this.first = first;
|
||||
}
|
||||
|
||||
public String getKeyword1()
|
||||
{
|
||||
return keyword1;
|
||||
}
|
||||
|
||||
public void setKeyword1( String keyword1 )
|
||||
{
|
||||
this.keyword1 = keyword1;
|
||||
}
|
||||
|
||||
public String getKeyword1Color()
|
||||
{
|
||||
return keyword1Color;
|
||||
}
|
||||
|
||||
public void setKeyword1Color( String keyword1Color )
|
||||
{
|
||||
this.keyword1Color = keyword1Color;
|
||||
}
|
||||
|
||||
public String getKeyword2()
|
||||
{
|
||||
return keyword2;
|
||||
}
|
||||
|
||||
public void setKeyword2( String keyword2 )
|
||||
{
|
||||
this.keyword2 = keyword2;
|
||||
}
|
||||
|
||||
public String getKeyword2Color()
|
||||
{
|
||||
return keyword2Color;
|
||||
}
|
||||
|
||||
public void setKeyword2Color( String keyword2Color )
|
||||
{
|
||||
this.keyword2Color = keyword2Color;
|
||||
}
|
||||
|
||||
public String getRemark()
|
||||
{
|
||||
return remark;
|
||||
}
|
||||
|
||||
public void setRemark( String remark )
|
||||
{
|
||||
this.remark = remark;
|
||||
}
|
||||
|
||||
public String getRemarkColor()
|
||||
{
|
||||
return remarkColor;
|
||||
}
|
||||
|
||||
public void setRemarkColor( String remarkColor )
|
||||
{
|
||||
this.remarkColor = remarkColor;
|
||||
}
|
||||
|
||||
public String getUrl()
|
||||
{
|
||||
return url;
|
||||
}
|
||||
|
||||
public void setUrl( String url )
|
||||
{
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
public String getAppid()
|
||||
{
|
||||
return appid;
|
||||
}
|
||||
|
||||
public void setAppid( String appid )
|
||||
{
|
||||
this.appid = appid;
|
||||
}
|
||||
|
||||
public String getPagePath()
|
||||
{
|
||||
return pagePath;
|
||||
}
|
||||
|
||||
public void setPagePath( String pagePath )
|
||||
{
|
||||
this.pagePath = pagePath;
|
||||
}
|
||||
}
|
@@ -0,0 +1,10 @@
|
||||
|
||||
handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler
|
||||
|
||||
.level = INFO
|
||||
|
||||
java.util.logging.FileHandler.pattern = ./logs/log_%u.log
|
||||
java.util.logging.FileHandler.limit = 50000
|
||||
java.util.logging.FileHandler.count = 10
|
||||
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
|
||||
java.util.logging.FileHandler.append = true;
|
@@ -0,0 +1,100 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2022-04-22 10:53:49
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2022-05-10 11:33:41
|
||||
* @FilePath: \DisasterWarning\src\test\java\com\cpic\xim\wechat\officalAccount\sendMessageTest.java
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
package com.cpic.xim.wechat.officalAccount;
|
||||
|
||||
import com.cpic.xim.notify.disaster.QWeatherDisasterWarning;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import com.cpic.xim.httpUtil.*;
|
||||
import java.io.IOException;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
public class sendMessageTest
|
||||
{
|
||||
private static String url =
|
||||
"https://cxxmwx.cpic.com.cn/app/index.php?i=2&c=entry&do=send_group_tpl_api&m=ok_tplmessage";
|
||||
|
||||
// @Test
|
||||
public void postNotifyMessageJson()
|
||||
{
|
||||
try
|
||||
{
|
||||
// sendMessage.postNotifyMessageJSON( url, "警报", "警报标题", "警报内容!" );
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
fail( "测试失败!" );
|
||||
}
|
||||
}
|
||||
|
||||
// @Test
|
||||
public void postNotifyMessage()
|
||||
{
|
||||
HashMap<String, String> headers = new HashMap<String, String>();
|
||||
String param = "tplid=57&groupid=1&first=亲爱的#realname#,您好!&"
|
||||
+ "keyword1=东山县气象台发布大雾黄色预警[Ⅲ级/较重]&" + "keyword1color=#ffff00&"
|
||||
+ "keyword2=东山县气象台2022年04月22日06时12分发布大雾黄色预警信号:预计未来12小时内,我县、闽南渔场和台湾浅滩渔场将出现能见度小于500米的雾。请注意防范!";
|
||||
|
||||
headers.put( "accept", "*/*" );
|
||||
headers.put( "Connection", "Keep-Alive" );
|
||||
headers.put( "Content-Type", "application/x-www-form-urlencoded;charset=UTF-8" );
|
||||
|
||||
try
|
||||
{
|
||||
HttpUtils.postHttpRequest( url, headers, param );
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// @Test
|
||||
public void testSendWeatherDisasterWarning() throws IOException
|
||||
{
|
||||
String warningJSON =
|
||||
"{\"code\":\"200\",\"updateTime\":\"2022-04-23T23:25+08:00\",\"fxLink\":\"http://hfx.link/3645\",\"warning\":[{\"id\":\"10123060820220423203500874007118\",\"sender\":\"东山县气象台\",\"pubTime\":\"2022-04-23T20:35+08:00\",\"title\":\"东山县气象台发布大雾黄色预警[Ⅲ级/较重]\",\"status\":\"active\",\"level\":\"黄色\",\"type\":\"1017\",\"typeName\":\"大雾\",\"text\":\"东山县气象台2022年04月23日20时35分发布大雾黄色预警信号:预计未来12小时内,我县、闽南渔场和台湾浅滩渔场将出现能见度小于500米的雾。请注意防范!\",\"related\":\"\",\"urgency\":\"\",\"certainty\":\"\"}],\"refer\":{\"sources\":[\"12379\"],\"license\":[\"no commercial use\"]}}";
|
||||
|
||||
try
|
||||
{
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
QWeatherDisasterWarning warning =
|
||||
mapper.readValue( warningJSON, QWeatherDisasterWarning.class );
|
||||
|
||||
String city = "东山县";
|
||||
|
||||
|
||||
sendMessage.saveWeatherDisasterWarning( city, warning );
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
fail( error.getMessage() );
|
||||
}
|
||||
}
|
||||
|
||||
// @Test
|
||||
public void testCheckWarningHasSended()
|
||||
{
|
||||
String warningID = "10123060820220422061200476313081";
|
||||
|
||||
try
|
||||
{
|
||||
sendMessage.checkWarningHasSended( warningID );
|
||||
}
|
||||
catch ( Exception error )
|
||||
{
|
||||
error.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
19
应用/1.0/config.json
Normal file
19
应用/1.0/config.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"title": "天气灾害预警配置文件",
|
||||
"key": "fe9fa8eeeb6f4301a92541eed565dd15",
|
||||
"query_url": "https://devapi.qweather.com/v7/warning/now?",
|
||||
"wechat_officalaccount_url": "https://cxxmwx.cpic.com.cn/app/index.php?i=2&c=entry&do=send_group_tpl_api&m=ok_tplmessage",
|
||||
"query_interval": 10,
|
||||
"cities": [
|
||||
{
|
||||
"city_name": "厦门",
|
||||
"city_code": "101230201"
|
||||
}
|
||||
],
|
||||
"notify_stuffs": [
|
||||
{
|
||||
"stuff_name": "王炜",
|
||||
"mobile_phone": "15959215339"
|
||||
}
|
||||
]
|
||||
}
|
14
应用/1.0/db.json
Normal file
14
应用/1.0/db.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"tns_name": "xmcx1",
|
||||
"ip_addr": "10.39.0.86",
|
||||
"jdbc_url": "jdbc:oracle:thin:@10.39.0.86:1521:xmcx1",
|
||||
"table_space": "wechat",
|
||||
"user_name": "wechat",
|
||||
"password": "@rn7Q+t5zeyKIZ~s",
|
||||
"tables": [
|
||||
{
|
||||
"table_name": "weather_disaster_notify",
|
||||
"table_description": "天气预警消息表"
|
||||
}
|
||||
]
|
||||
}
|
10
应用/1.0/logging.properties
Normal file
10
应用/1.0/logging.properties
Normal file
@@ -0,0 +1,10 @@
|
||||
|
||||
handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler
|
||||
|
||||
.level = INFO
|
||||
|
||||
java.util.logging.FileHandler.pattern = ./logs/log_%u.log
|
||||
java.util.logging.FileHandler.limit = 50000
|
||||
java.util.logging.FileHandler.count = 1
|
||||
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
|
||||
java.util.logging.FileHandler.append = true;
|
BIN
数据/和风天气/和风天气-城市代码.xlsx
Normal file
BIN
数据/和风天气/和风天气-城市代码.xlsx
Normal file
Binary file not shown.
23
数据/和风天气/实例-东山.json
Normal file
23
数据/和风天气/实例-东山.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"code": "200",
|
||||
"updateTime": "2022-04-22T15:54+08:00",
|
||||
"fxLink": "http://hfx.link/3645",
|
||||
"warning": [
|
||||
{
|
||||
"id": "10123060820220422061200476313081",
|
||||
"sender": "东山县气象台",
|
||||
"pubTime": "2022-04-22T06:12+08:00",
|
||||
"title": "东山县气象台发布大雾黄色预警[Ⅲ级/较重]",
|
||||
"status": "active",
|
||||
"level": "黄色",
|
||||
"type": "1017",
|
||||
"typeName": "大雾",
|
||||
"text": "东山县气象台2022年04月22日06时12分发布大雾黄色预警信号:预计未来12小时内,我县、闽南渔场和台湾浅滩渔场将出现能见度小于500米的雾。请注意防范!",
|
||||
"related": "",
|
||||
"urgency": "",
|
||||
"certainty": ""
|
||||
}
|
||||
],
|
||||
"refer": { "sources": ["12379"], "license": ["no commercial use"] },
|
||||
"testURL": "https://devapi.qweather.com/v7/warning/now?key=fe9fa8eeeb6f4301a92541eed565dd15&location=101230608"
|
||||
}
|
211
文档/example.java
Normal file
211
文档/example.java
Normal file
@@ -0,0 +1,211 @@
|
||||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2022-04-18 11:37:33
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2022-04-18 15:58:34
|
||||
* @FilePath: \undefinedd:\develop\产险厦门分公司项目\天气灾害预警\文档\example.java
|
||||
|
||||
import org.apache.httpcomponents.httpclient.HttpClient;
|
||||
import org.apache.commons.httpclient.HttpStatus;
|
||||
import org.apache.commons.httpclient.methods.PostMethod;
|
||||
import org.apache.commons.httpclient.methods.StringRequestEntity;
|
||||
|
||||
public class HttpUtils {
|
||||
public static String sendPostWithJson(String url, String jsonStr, HashMap<String, String> headers) {
|
||||
// 返回的结果
|
||||
String jsonResult = "";
|
||||
|
||||
try {
|
||||
HttpClient client = new HttpClient();
|
||||
|
||||
// 连接超时
|
||||
client.getHttpConnectionManager().getParams().setConnectionTimeout(3 * 1000);
|
||||
// 读取数据超时
|
||||
client.getHttpConnectionManager().getParams().setSoTimeout(3 * 60 * 1000);
|
||||
client.getParams().setContentCharset("UTF-8");
|
||||
|
||||
PostMethod postMethod = new PostMethod(url);
|
||||
|
||||
postMethod.setRequestHeader("content-type", headers.get("content-type"));
|
||||
|
||||
// 非空
|
||||
if (null != jsonStr && !"".equals(jsonStr)) {
|
||||
StringRequestEntity requestEntity = new StringRequestEntity(jsonStr, headers.get("content-type"),
|
||||
"UTF-8");
|
||||
postMethod.setRequestEntity(requestEntity);
|
||||
}
|
||||
|
||||
int status = client.executeMethod(postMethod);
|
||||
|
||||
if (status == HttpStatus.SC_OK) {
|
||||
jsonResult = postMethod.getResponseBodyAsString();
|
||||
} else {
|
||||
throw new RuntimeException("接口连接失败!");
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("接口连接失败!");
|
||||
}
|
||||
return jsonResult;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
String requestUrl = "http://localhost:8070/test/rz/server/rzxx/at_VaildToken.do";
|
||||
String jsonStr = "{\"name\":\"张三\"}";
|
||||
|
||||
HashMap<String, String> headers = new HashMap<>(3);
|
||||
headers.put("content-type", "application/json");
|
||||
|
||||
// 发送post请求
|
||||
String resultData = HttpUtils.sendPostWithJson(requestUrl, jsonStr, headers);
|
||||
|
||||
// 并接收返回结果
|
||||
System.out.println(resultData);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @author : cjd
|
||||
*
|
||||
* @description : post接口 返回结果字符串
|
||||
*
|
||||
* @params : [url, param]
|
||||
*
|
||||
* @param url 请求接口
|
||||
*
|
||||
* @param param 需要的json字符串
|
||||
*
|
||||
* @return :java.lang.String
|
||||
*
|
||||
* @date : 17:31 2018/8/1
|
||||
*
|
||||
*/
|
||||
|
||||
public static String sendPost(String url, String param)
|
||||
{
|
||||
OutputStreamWriter out = null;
|
||||
BufferedReader in = null;
|
||||
|
||||
String result = "";
|
||||
|
||||
try {
|
||||
URL realUrl = new URL(url);
|
||||
HttpURLConnection conn = null; // 打开和URL之间的连接
|
||||
|
||||
conn = (HttpURLConnection) realUrl.openConnection(); // 发送POST请求必须设置如下两行
|
||||
conn.setDoOutput(true);
|
||||
conn.setDoInput(true);
|
||||
conn.setRequestMethod("POST"); // POST方法
|
||||
|
||||
// 设置通用的请求属性
|
||||
conn.setRequestProperty("accept", "*/*");
|
||||
conn.setRequestProperty("connection", "Keep-Alive");
|
||||
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
|
||||
conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
|
||||
conn.connect(); // 获取URLConnection对象对应的输出流
|
||||
|
||||
out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8"); // 发送请求参数
|
||||
out.write(param); // flush输出流的缓冲
|
||||
out.flush(); // 定义BufferedReader输入流来读取URL的响应
|
||||
|
||||
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
|
||||
|
||||
String line;
|
||||
while ((line = in.readLine()) != null)
|
||||
{
|
||||
result += line;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.out.println("发送 POST 请求出现异常!" + e);
|
||||
|
||||
e.printStackTrace();
|
||||
|
||||
} // 使用finally块来关闭输出流、输入流
|
||||
finally {
|
||||
try {
|
||||
if (out != null)
|
||||
{
|
||||
out.close();
|
||||
}
|
||||
|
||||
if (in != null)
|
||||
{
|
||||
in.close();
|
||||
}
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public String postMethod(String url,String param){
|
||||
// 结果值
|
||||
StringBuffer rest=new StringBuffer();
|
||||
|
||||
HttpURLConnection conn=null;
|
||||
OutputStream out=null;
|
||||
BufferedReader br=null;
|
||||
|
||||
try {
|
||||
// 创建 URL
|
||||
URL restUrl = new URL(url);
|
||||
// 打开连接
|
||||
conn= (HttpURLConnection) restUrl.openConnection();
|
||||
// 设置请求方式为 POST
|
||||
conn.setRequestMethod("POST");
|
||||
conn.setRequestProperty("Connection","keep-Alive");
|
||||
// 设置接收文件类型
|
||||
// conn.setRequestProperty("Accept","application/json");
|
||||
//设置发送文件类型
|
||||
/**
|
||||
这里注意 传递JSON数据的话 就要设置
|
||||
普通参数的话 就要注释掉
|
||||
*/
|
||||
conn.setRequestProperty("Content-Type","application/json");
|
||||
// 输入 输出 都打开
|
||||
conn.setDoOutput(true);
|
||||
conn.setDoInput(true);
|
||||
//开始连接
|
||||
conn.connect();
|
||||
|
||||
// 传递参数 流的方式
|
||||
out=conn.getOutputStream();
|
||||
out.write(param.getBytes());
|
||||
out.flush();
|
||||
|
||||
// 读取数据
|
||||
br=new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));
|
||||
String line=null;
|
||||
while (null != (line=br.readLine())){
|
||||
rest.append(line);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}finally {
|
||||
// 关闭所有通道
|
||||
try {
|
||||
if (br!=null) {
|
||||
br.close();
|
||||
}
|
||||
if (out!=null) {
|
||||
out.close();
|
||||
}
|
||||
if (conn!=null) {
|
||||
conn.disconnect();
|
||||
}
|
||||
} catch (Exception e2) {
|
||||
e2.printStackTrace();
|
||||
}
|
||||
}
|
||||
return rest.toString();
|
||||
}
|
BIN
文档/公众号接口/~$发送接口调用文档.docx
Normal file
BIN
文档/公众号接口/~$发送接口调用文档.docx
Normal file
Binary file not shown.
BIN
文档/公众号接口/消息发送接口调用文档.docx
Normal file
BIN
文档/公众号接口/消息发送接口调用文档.docx
Normal file
Binary file not shown.
Reference in New Issue
Block a user