Compare commits

..

16 Commits

Author SHA1 Message Date
Kane Wang 3b1844c994 和风天气json结构变更。 2022-06-07 14:03:35 +08:00
Kane Wang db8f9e9c05 保存进度! 2022-05-17 10:39:53 +08:00
Kane Wang 4c0cb3c76e 保存进度! 2022-05-13 17:44:23 +08:00
Kane Wang 65431a0f0e 增加要查询的城市清单。 2022-05-12 18:17:24 +08:00
Kane Wang cd8bcb8ba0 Merge branch 'develop' of http://cppdisciple.f3322.org:3000/CPICXIM/disaster_warrning into develop 2022-05-12 10:10:23 +08:00
Kane Wang e800558a32 修改数据保存方式! 2022-05-12 10:09:35 +08:00
Kane Wang b993638e5b 提交小修改! 2022-05-11 23:10:01 +08:00
Kane Wang 6671cb69c9 问题已修正! 2022-05-10 19:37:52 +08:00
Kane Wang 7abeffb61a 清理 2022-05-10 16:37:32 +08:00
Kane Wang 54d73db62f 保存进度! 2022-05-10 16:36:06 +08:00
Kane Wang 8149e21e2f 程序打包! 2022-05-10 16:35:07 +08:00
Kane Wang 2847747f53 完成日志功能! 2022-05-10 16:32:59 +08:00
Kane Wang 2dbe40b7a8 Merge branch 'develop'
第一个可用版本!
2022-04-24 10:22:43 +08:00
Kane Wang 566809868a 保存小修改! 2022-03-25 17:36:26 +08:00
Kane Wang e5be1e0b66 保存小修改! 2022-03-25 17:35:40 +08:00
Kane 5672c83a71 Initial commit 2022-03-25 09:22:22 +00:00
46 changed files with 572 additions and 2637 deletions

98
.gitignore vendored
View File

@ -1,6 +1,102 @@
target/*
*.jar
# ---> C++
# Prerequisites
*.d
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
*.smod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
# ---> CMake
CMakeLists.txt.user
CMakeCache.txt
CMakeFiles
CMakeScripts
Testing
Makefile
cmake_install.cmake
install_manifest.txt
compile_commands.json
CTestTestfile.cmake
_deps
# ---> Java
# 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*
replay_pid*
# ---> Maven
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
# https://github.com/takari/maven-wrapper#usage-without-binary-jar
.mvn/wrapper/maven-wrapper.jar
# Eclipse m2e generated files
# Eclipse Core
.project
# JDT-specific (Eclipse Java Development Tools)
.classpath
code/java/天气灾害预警/target/
code/java/天气灾害预警/out/
*.jar
*.iws
*.log
*.lck
*.lck

View File

@ -1,8 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View File

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<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="天气灾害预警" target="17" />
</bytecodeTargetLevel>
</component>
</project>

View File

@ -1,25 +0,0 @@
<?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" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.4" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.9" level="project" />
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.3" level="project" />
<orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" 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>

View File

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="PROJECT" charset="UTF-8" />
</component>
</project>

View File

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<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>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://maven.aliyun.com/repository/public" />
</remote-repository>
</component>
</project>

View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

View File

@ -1,29 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="compile" type="MavenRunConfiguration" factoryName="Maven">
<MavenSettings>
<option name="myGeneralSettings" />
<option name="myRunnerSettings" />
<option name="myRunnerParameters">
<MavenRunnerParameters>
<option name="profiles">
<set />
</option>
<option name="goals">
<list>
<option value="compile" />
</list>
</option>
<option name="pomFileName" />
<option name="profilesMap">
<map>
<entry key="dev" value="true" />
</map>
</option>
<option name="resolveToWorkspace" value="false" />
<option name="workingDirPath" value="$PROJECT_DIR$" />
</MavenRunnerParameters>
</option>
</MavenSettings>
<method v="2" />
</configuration>
</component>

View File

@ -1,124 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<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>
</project>

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
</component>
</project>

View File

@ -1,147 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="e81b1d7b-ad5e-432e-bbb6-6fbbb75430af" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/.idea/encodings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/encodings.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/runConfigurations/compile.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/runConfigurations/compile.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/AppMain.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/AppMain.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/cpic/xim/disaster_warning/QWeatherDisasterWarningItem.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/cpic/xim/disaster_warning/QWeatherDisasterWarningItem.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/cpic/xim/disaster_warning/QWeatherDisasterWarningRefer.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/cpic/xim/disaster_warning/QWeatherDisasterWarningRefer.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/cpic/xim/disaster_warning/WeatherDisasterWarningGrabber.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/cpic/xim/disaster_warning/WeatherDisasterWarningGrabber.java" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Class" />
</list>
</option>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../../.." />
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="MavenImportPreferences">
<option name="generalSettings">
<MavenGeneralSettings>
<option name="localRepository" value="$PROJECT_DIR$/../../../../../../DevTools/maven/Repository" />
<option name="mavenHome" value="$PROJECT_DIR$/../../../../../../DevTools/maven/apache-maven-3.8.5" />
<option name="useMavenConfig" value="true" />
<option name="userSettingsFile" value="D:\DevTools\maven\apache-maven-3.8.5\conf\settings.xml" />
</MavenGeneralSettings>
</option>
</component>
<component name="MavenRunner">
<option name="delegateBuildToMaven" value="true" />
<option name="jreName" value="1.8" />
</component>
<component name="ProblemsViewState">
<option name="selectedTabId" value="ProjectErrors" />
</component>
<component name="ProjectId" id="26PXzlujlRW5evopBaaKpyGjycC" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
<ConfirmationsSetting value="1" id="Add" />
</component>
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="node.js.detected.package.eslint" value="true" />
<property name="node.js.detected.package.tslint" value="true" />
<property name="node.js.selected.package.eslint" value="(autodetect)" />
<property name="node.js.selected.package.tslint" value="(autodetect)" />
<property name="nodejs_package_manager_path" value="npm" />
<property name="project.structure.last.edited" value="Modules" />
<property name="project.structure.proportion" value="0.15" />
<property name="project.structure.side.proportion" value="0.2" />
<property name="settings.editor.selected.configurable" value="MavenSettings" />
</component>
<component name="RunAnythingCache">
<option name="myCommands">
<command value="idea:idea -U" />
</option>
</component>
<component name="RunManager" selected="Maven.compile">
<configuration name="AppMain" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="AppMain" />
<module name="disaster_warning" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration default="true" type="JetRunConfigurationType">
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration default="true" type="KotlinStandaloneScriptRunConfigurationType">
<option name="filePath" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<recent_temporary>
<list>
<item itemvalue="Application.AppMain" />
</list>
</recent_temporary>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="e81b1d7b-ad5e-432e-bbb6-6fbbb75430af" name="Changes" comment="" />
<created>1647326463353</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1647326463353</updated>
<workItem from="1647326471822" duration="6934000" />
<workItem from="1647334567225" duration="1649000" />
<workItem from="1647338154313" duration="98000" />
<workItem from="1647398025447" duration="1714000" />
<workItem from="1647399779588" duration="4127000" />
<workItem from="1647408946144" duration="1177000" />
<workItem from="1647410156413" duration="10520000" />
<workItem from="1647479250349" duration="12253000" />
<workItem from="1647531294555" duration="2501000" />
<workItem from="1647534118478" duration="613000" />
<workItem from="1647535499626" duration="591000" />
<workItem from="1647536147299" duration="30000" />
<workItem from="1647536420955" duration="167000" />
<workItem from="1647536652740" duration="1720000" />
</task>
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State />
</value>
</entry>
</map>
</option>
</component>
<component name="XSLT-Support.FileAssociations.UIState">
<expand />
<select />
</component>
</project>

View File

@ -3,10 +3,19 @@
"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"
},
{
"city_name": "同安",
"city_code": "101230202"
},
{
"city_name": "翔安",
"city_code": "101230207"
}
],
"notify_stuffs": [

View File

@ -21,17 +21,13 @@
<SOURCES />
</library>
</orderEntry>
<orderEntry type="library" name="Maven: com.oracle:ojdbc8:19.3.0.0.0" level="project" />
<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-logging:commons-logging:1.2" 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" />

View File

@ -267,15 +267,15 @@
<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">
<library name="Maven: com.oracle:ojdbc8:19.3.0.0.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.4/commons-beanutils-1.9.4.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/com/oracle/ojdbc8/19.3.0.0.0/ojdbc8-19.3.0.0.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.4/commons-beanutils-1.9.4-javadoc.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/com/oracle/ojdbc8/19.3.0.0.0/ojdbc8-19.3.0.0.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.4/commons-beanutils-1.9.4-sources.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/com/oracle/ojdbc8/19.3.0.0.0/ojdbc8-19.3.0.0.0-sources.jar!/" />
</SOURCES>
</library>
<library name="Maven: commons-codec:commons-codec:1.11">
@ -289,37 +289,15 @@
<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">
<library name="Maven: commons-logging:commons-logging:1.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/commons-collections/commons-collections/20040616/commons-collections-20040616.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/commons-logging/commons-logging/1.2/commons-logging-1.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/commons-collections/commons-collections/20040616/commons-collections-20040616-javadoc.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/commons-logging/commons-logging/1.2/commons-logging-1.2-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!/" />
<root url="jar://$MAVEN_REPOSITORY$/commons-logging/commons-logging/1.2/commons-logging-1.2-sources.jar!/" />
</SOURCES>
</library>
<library name="Maven: junit:junit:4.13.2">
@ -333,28 +311,6 @@
<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!/" />

View File

@ -7,4 +7,4 @@ 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;
java.util.logging.FileHandler.append = true

View File

@ -8,9 +8,9 @@
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc8</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/ojdbc8.jar</systemPath>
<version>19.3.0.0.0</version>
<!-- <scope>system</scope>
<systemPath>${project.basedir}/lib/ojdbc8.jar</systemPath> -->
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
@ -23,37 +23,6 @@
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- <dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>20040616</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>net.sf.ezmorph</groupId>
<artifactId>ezmorph</artifactId>
<version>1.0.6</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency> -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>

View File

@ -1,15 +1,18 @@
/*
* @Author: Kane
* @Date: 2022-04-22 10:53:49
* @LastEditors: Kane
* @LastEditTime: 2022-05-10 16:01:13
* @LastEditTime: 2022-06-07 13:16:35
* @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;
@ -19,43 +22,34 @@ import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.*;
public class AppMain
{
public class AppMain {
// private final static String LOG_FILE_PATH = "./logs/app%u.log";
public static void main( String[] args )
{
public static void main(String[] args) {
String json;
WeatherDisasterNotifyConfig config = null;
QWeatherDisasterWarning warning = null;
Logger logger = null;
// 配置logger
try
{
try {
setRootLogger();
logger = Logger.getLogger( "com.cpicxim" );
}
catch ( IOException error )
{
System.out.println( "配置logger失败原因" + error.getMessage() );
logger = Logger.getLogger("com.cpicxim");
} catch (IOException error) {
System.out.println("配置logger失败原因" + error.getMessage());
return;
}
// 读取配置
try
{
config = WeatherDisasterNotifyConfig.getConfig();
}
catch ( IOException error )
{
System.out.println( "读取配置文件失败!" );
System.out.println( error.getMessage() );
try {
config = AppConfigManager.getConfig();
} catch (IOException error) {
System.out.println("读取配置文件失败!");
System.out.println(error.getMessage());
logger.log( Level.SEVERE, "读取配置文件失败:{0}", error.getMessage() );
logger.log(Level.SEVERE, "读取配置文件失败:{0}", error.getMessage());
return;
}
@ -65,59 +59,68 @@ public class AppMain
String userKey = config.getKey();
// 遍历所有城市查询是否有警报有则推送
for ( City city : cities )
{
try
{
json = WeatherDisasterWarningGrabber.getWeatherDisasterWarningJSON( queryURL,
userKey, city.getCityCode() );
warning = WeatherDisasterWarningGrabber.convertWeatherDisasterWarning( json );
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} );
logger.log(Level.INFO, "查询{0}天气预警,结果:{1}。", new Object[] { city.getCityName(), json });
// 判断是否有警报
if ( warning.getWarning().isEmpty() == true)
{
logger.log( Level.INFO, "查询{0}天气预警,无警报!。", new Object[]
{ city.getCityName()} );
continue;
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(), item);
}
} 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() });
}
logger.log( Level.INFO, "查询{0}天气预警,发送日志。", new Object[]
{ city.getCityName()} );
sendMessage.sendWeatherDisasterWarning( config.getWechatOfficalAccountURL(),
warning );
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() });
}
}
}
@ -125,31 +128,16 @@ public class AppMain
/**
* 设置JUL的logger
*/
private static void setRootLogger() throws IOException
{
// Logger rootLogger = Logger.getLogger( "com.cpicxim" );
// ConsoleHandler consoleHandler = new ConsoleHandler();
// FileHandler fileHandler = new FileHandler( LOG_FILE_PATH );
// SimpleFormatter formatter = new SimpleFormatter();
// consoleHandler.setFormatter( formatter );
// fileHandler.setFormatter( formatter );
// rootLogger.addHandler( consoleHandler );
// rootLogger.addHandler( fileHandler );
// rootLogger.setUseParentHandlers( false );
// rootLogger.setLevel( Level.ALL );
private static void setRootLogger() throws IOException {
LogManager logManager = LogManager.getLogManager();
// 使用外部的配置文件
FileInputStream configFile = new FileInputStream( "./logging.properties" );
FileInputStream configFile = new FileInputStream("./logging.properties");
// 使用jar中的配置文件
// InputStream configFile =
// AppMain.class.getClassLoader().getResourceAsStream( "logging.properties" );
logManager.readConfiguration( configFile );
logManager.readConfiguration(configFile);
Logger rootLogger = Logger.getLogger( "com.cpicxim" );
Logger.getLogger("com.cpicxim");
}
}

View File

@ -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;
}
}

View File

@ -1,72 +1,22 @@
/*
* @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.io.InputStreamReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Vector;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
public class WeatherDisasterNotifyConfig
{
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;
}
public WeatherDisasterNotifyConfig()
{};
@ -106,6 +56,18 @@ public class WeatherDisasterNotifyConfig
return cities;
}
public int getQueryInterval()
{
return queryInterval;
}
public void setQueryInterval( int queryInterval )
{
this.queryInterval = queryInterval;
}
public void setCities( Vector<City> cities )
{
this.cities = cities;
@ -131,12 +93,24 @@ public class WeatherDisasterNotifyConfig
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;
}

View File

@ -74,7 +74,7 @@ public class QWeatherDisasterWarning
private String code;
@JsonProperty( "updateTime")
@JsonFormat( pattern = "yyyy-MM-dd\'T\'HH:mmXXX")
@JsonFormat( pattern = "yyyy-MM-dd'T'HH:mmXXX")
private Date updateTime;
@JsonProperty( "fxLink")

View File

@ -7,21 +7,21 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
//import com.fasterxml.jackson.annotation.JsonIgnore;
public class QWeatherDisasterWarningItem
{
public QWeatherDisasterWarningItem()
{}
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)
{
public QWeatherDisasterWarningItem(String id, String sender, Date pubTime, String title, String status,
String level, String severity, String severityColor, 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.severity = severity;
this.severityColor = severityColor;
this.type = type;
this.typeName = typeName;
this.text = text;
@ -31,163 +31,233 @@ public class QWeatherDisasterWarningItem
}
@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 );
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((certainty == null) ? 0 : certainty.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((level == null) ? 0 : level.hashCode());
result = prime * result + ((pubTime == null) ? 0 : pubTime.hashCode());
result = prime * result + ((related == null) ? 0 : related.hashCode());
result = prime * result + ((sender == null) ? 0 : sender.hashCode());
result = prime * result + ((severity == null) ? 0 : severity.hashCode());
result = prime * result + ((severityColor == null) ? 0 : severityColor.hashCode());
result = prime * result + ((status == null) ? 0 : status.hashCode());
result = prime * result + ((text == null) ? 0 : text.hashCode());
result = prime * result + ((title == null) ? 0 : title.hashCode());
result = prime * result + ((type == null) ? 0 : type.hashCode());
result = prime * result + ((typeName == null) ? 0 : typeName.hashCode());
result = prime * result + ((urgency == null) ? 0 : urgency.hashCode());
return result;
}
@Override
public int hashCode()
{
return Objects.hash( id, sender, pubTime, title, status, level, type, typeName, text,
related, urgency, certainty );
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
QWeatherDisasterWarningItem other = (QWeatherDisasterWarningItem) obj;
if (certainty == null) {
if (other.certainty != null)
return false;
} else if (!certainty.equals(other.certainty))
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (level == null) {
if (other.level != null)
return false;
} else if (!level.equals(other.level))
return false;
if (pubTime == null) {
if (other.pubTime != null)
return false;
} else if (!pubTime.equals(other.pubTime))
return false;
if (related == null) {
if (other.related != null)
return false;
} else if (!related.equals(other.related))
return false;
if (sender == null) {
if (other.sender != null)
return false;
} else if (!sender.equals(other.sender))
return false;
if (severity == null) {
if (other.severity != null)
return false;
} else if (!severity.equals(other.severity))
return false;
if (severityColor == null) {
if (other.severityColor != null)
return false;
} else if (!severityColor.equals(other.severityColor))
return false;
if (status == null) {
if (other.status != null)
return false;
} else if (!status.equals(other.status))
return false;
if (text == null) {
if (other.text != null)
return false;
} else if (!text.equals(other.text))
return false;
if (title == null) {
if (other.title != null)
return false;
} else if (!title.equals(other.title))
return false;
if (type == null) {
if (other.type != null)
return false;
} else if (!type.equals(other.type))
return false;
if (typeName == null) {
if (other.typeName != null)
return false;
} else if (!typeName.equals(other.typeName))
return false;
if (urgency == null) {
if (other.urgency != null)
return false;
} else if (!urgency.equals(other.urgency))
return false;
return true;
}
public String getId()
{
public String getId() {
return id;
}
public void setId( String id )
{
public void setId(String id) {
this.id = id;
}
public String getSender()
{
public String getSender() {
return sender;
}
public void setSender( String sender )
{
public void setSender(String sender) {
this.sender = sender;
}
public Date getPubTime()
{
public Date getPubTime() {
return pubTime;
}
public void setPubTime( Date pubTime )
{
public void setPubTime(Date pubTime) {
this.pubTime = pubTime;
}
public String getTitle()
{
public String getTitle() {
return title;
}
public void setTitle( String title )
{
public void setTitle(String title) {
this.title = title;
}
public String getStatus()
{
public String getStatus() {
return status;
}
public void setStatus( String status )
{
public void setStatus(String status) {
this.status = status;
}
public String getLevel()
{
public String getLevel() {
return level;
}
public void setLevel( String level )
{
public void setLevel(String level) {
this.level = level;
}
public String getType()
{
public String getSeverity() {
return severity;
}
public void setSeverity(String severity) {
this.severity = severity;
}
public String getSeverityColor() {
return severityColor;
}
public void setSeverityColor(String severityColor) {
this.severityColor = severityColor;
}
public String getType() {
return type;
}
public void setType( String type )
{
public void setType(String type) {
this.type = type;
}
public String getTypeName()
{
public String getTypeName() {
return typeName;
}
public void setTypeName( String typeName )
{
public void setTypeName(String typeName) {
this.typeName = typeName;
}
public String getText()
{
public String getText() {
return text;
}
public void setText( String text )
{
public void setText(String text) {
this.text = text;
}
public String getRelated()
{
public String getRelated() {
return related;
}
public void setRelated( String related )
{
public void setRelated(String related) {
this.related = related;
}
public String getUrgency()
{
public String getUrgency() {
return urgency;
}
public void setUrgency( String urgency )
{
public void setUrgency(String urgency) {
this.urgency = urgency;
}
public String getCertainty()
{
public String getCertainty() {
return certainty;
}
public void setCertainty( String 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")
@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 severity;
private String severityColor;
private String type;
private String typeName;
private String text;

View File

@ -2,7 +2,7 @@
* @Author: Kane
* @Date: 2022-04-22 10:53:49
* @LastEditors: Kane
* @LastEditTime: 2022-05-06 11:14:32
* @LastEditTime: 2022-05-12 09:51:13
* @FilePath: \DisasterWarning\src\main\java\com\cpic\xim\wechat\officalAccount\sendMessage.java
* @Description: 用来推送公众号消息的程序库
*
@ -14,22 +14,23 @@ 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.util.Vector;
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
@ -39,13 +40,14 @@ public class sendMessage
/**
* 推送天气灾害预警接口文档参考 彭奕洁 编写消息发送接口调用文档
* 使用 post 方式请求体内容以最基础的 post 格式
*
* @param officalAccountURL 产险厦门分公司公众号接口网址
* @param warning 灾害预警对象
* @param warningItem 灾害预警对象
*/
public static void sendWeatherDisasterWarning( String officalAccountURL,
QWeatherDisasterWarning warning )
QWeatherDisasterWarningItem warningItem )
{
Vector<QWeatherDisasterWarningItem> warningItems = warning.getWarning();
// Vector<QWeatherDisasterWarningItem> warningItems = warningItem.getWarning();
StringBuilder requestBody = null;
// 设置请求头参数
@ -56,36 +58,36 @@ public class sendMessage
headers.put( "Content-Type", "application/x-www-form-urlencoded;charset=UTF-8" );
// 遍历消息将消息推送出去
for ( QWeatherDisasterWarningItem item : warningItems )
// 拼接消息内容
String title = warningItem.getTitle();
String text = warningItem.getText();
String color = warningLevel.containsKey( 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
{
// 拼接消息内容
String title = item.getTitle();
String text = item.getText();
String color = warningLevel.keySet().contains( item.getLevel() )
? warningLevel.get( item.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();
}
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
*/
@ -94,16 +96,16 @@ public class sendMessage
{
boolean result = false;
OracleConfig dbConfig = OracleConfigManager.getOracleConfig();;
OracleConfig dbConfig = OracleConfigManager.getOracleConfig();
Connection conn = null;
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
ResultSet rs = null;
String jdbcURL = dbConfig.getJdbcURL();
String jdbcURL = dbConfig.getJdbcURL();
String userName = dbConfig.getUserName();
String password = dbConfig.getPassword();
String sql = "select count(*) from weather_disaster_notify where notify_id = ?";
String sql = "select count(*) from weather_disaster_notify where notify_id = ?";
// Logger logger = Logger.getLogger( "com.cpicxim.wechat.officalAccount.sendMessage" );
@ -117,7 +119,7 @@ public class sendMessage
rs = stmt.executeQuery();
if ( rs.next() && rs.getInt( 1 ) == 0)
if ( rs.next() && rs.getInt( 1 ) == 0 )
{
result = true;
}
@ -126,7 +128,7 @@ public class sendMessage
{
try
{
if ( rs != null)
if ( rs != null )
{
rs.close();
}
@ -138,7 +140,7 @@ public class sendMessage
try
{
if ( stmt != null)
if ( stmt != null )
{
stmt.close();
}
@ -150,7 +152,7 @@ public class sendMessage
try
{
if ( conn != null)
if ( conn != null )
{
conn.close();
}
@ -168,25 +170,28 @@ public class sendMessage
* 保存天气预警警报数据
* 保存至 oracle xmcx1 数据库 wechat 表空间下 weather_disaster_notify
* 保存的数据用来判断预警是否已经推送过以防止反复推送数据
* @param city 城市名称
*
* @param city 城市名称
* @param warning 预警数据 QWeatherDisasterWarningItem 对象
* @throws SQLException 执行sql时可能抛出的异常出现sql异常就回滚事务
* @throws IOException 读取数据库配置文件时可能抛出的异常
* @throws SQLException 执行sql时可能抛出的异常出现sql异常就回滚事务
* @throws IOException 读取数据库配置文件时可能抛出的异常
* @throws ClassNotFoundException 加载oracle jdbc驱动时可能抛出的异常
*/
public static void saveWeatherDisasterWarning( String city, QWeatherDisasterWarning warnings )
public static void saveWeatherDisasterWarning( String city,
QWeatherDisasterWarningItem warning )
throws SQLException, IOException, ClassNotFoundException
{
Connection conn = null;
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( ?,?,?,?,?,?,?,?,?)";
String sql = new StringBuilder().append( "insert into weather_disaster_notify(notify_id, sender, city," )
.append( "warning_level, warning_type_code, warning_type_name, title," )
.append( "text, pub_time) values( ?,?,?,?,?,?,?,?,?)" )
.toString();
OracleConfig dbConfig = OracleConfigManager.getOracleConfig();
String jdbcURL = dbConfig.getJdbcURL();
String jdbcURL = dbConfig.getJdbcURL();
String userName = dbConfig.getUserName();
String password = dbConfig.getPassword();
@ -197,23 +202,21 @@ public class sendMessage
conn = DriverManager.getConnection( jdbcURL, userName, password );
stmt = conn.prepareStatement( sql );
for ( QWeatherDisasterWarningItem warning : warnings.getWarning() )
{
java.sql.Timestamp pubTime =
new java.sql.Timestamp( warning.getPubTime().getTime() );
conn.setAutoCommit( false );
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 );
java.sql.Timestamp pubTime = new java.sql.Timestamp( warning.getPubTime().getTime() );
stmt.execute();
}
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();
@ -221,7 +224,7 @@ public class sendMessage
catch ( SQLException error )
{
// 出现sql错误就回滚
if ( conn != null)
if ( conn != null )
{
conn.rollback();
}
@ -232,7 +235,7 @@ public class sendMessage
{
try
{
if ( stmt != null)
if ( stmt != null )
{
stmt.close();
}
@ -244,7 +247,7 @@ public class sendMessage
try
{
if ( conn != null)
if ( conn != null )
{
conn.close();
}
@ -256,7 +259,6 @@ public class sendMessage
}
}
static
{
// 预警级别色彩
@ -269,50 +271,49 @@ public class sendMessage
}
}
class WechatOfficalAccountMessageParameter
{
WechatOfficalAccountMessageParameter()
{
tplID = 57;
tplID = 57;
groupID = 1;
}
@JsonProperty( "tplid")
@JsonProperty("tplid")
private int tplID;
@JsonProperty( "groupid")
@JsonProperty("groupid")
private int groupID;
@JsonProperty( "first")
@JsonProperty("first")
private String first;
@JsonProperty( "keyword1")
@JsonProperty("keyword1")
private String keyword1;
@JsonProperty( "keyword1color")
@JsonProperty("keyword1color")
private String keyword1Color;
@JsonProperty( "keyword2")
@JsonProperty("keyword2")
private String keyword2;
@JsonProperty( "keyword2color")
@JsonProperty("keyword2color")
private String keyword2Color;
@JsonProperty( "remark")
@JsonProperty("remark")
private String remark;
@JsonProperty( "remarkcolor")
@JsonProperty("remarkcolor")
private String remarkColor;
@JsonProperty( "url")
@JsonProperty("url")
private String url;
@JsonProperty( "appid")
@JsonProperty("appid")
private String appid;
@JsonProperty( "pagepath")
@JsonProperty("pagepath")
private String pagePath;
public int getTplID()

View File

@ -2,7 +2,7 @@
* @Author: Kane
* @Date: 2022-04-22 10:53:49
* @LastEditors: Kane
* @LastEditTime: 2022-05-10 11:33:41
* @LastEditTime: 2022-05-12 09:54:36
* @FilePath: \DisasterWarning\src\test\java\com\cpic\xim\wechat\officalAccount\sendMessageTest.java
* @Description:
*
@ -75,7 +75,7 @@ public class sendMessageTest
String city = "东山县";
sendMessage.saveWeatherDisasterWarning( city, warning );
// sendMessage.saveWeatherDisasterWarning( city, warning );
}
catch ( Exception error )
{

View File

@ -1,135 +0,0 @@
### 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

View File

@ -1,12 +0,0 @@
{
"tns_name": "xmcx1",
"ip_addr": "10.39.0.86",
"user_name": "",
"password": "",
"tables": [
{
"table_name": "",
"table_description": ""
}
]
}

View File

@ -1,38 +0,0 @@
<?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.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.4" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.9" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.4" level="project" />
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.9.3" level="project" />
<orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" 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>

View File

@ -1,381 +0,0 @@
<?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="######################################################################################## &#10;## &#10;## Available variables: &#10;## $entryList.methodList - List of method composites &#10;## $entryList.privateMethodList - List of private method composites &#10;## $entryList.fieldList - ArrayList of class scope field names &#10;## $entryList.className - class name &#10;## $entryList.packageName - package name &#10;## $today - Todays date in MM/dd/yyyy format &#10;## &#10;## MethodComposite variables: &#10;## $method.name - Method Name &#10;## $method.signature - Full method signature in String form &#10;## $method.reflectionCode - list of strings representing commented out reflection code to access method (Private Methods) &#10;## $method.paramNames - List of Strings representing the method's parameters' names &#10;## $method.paramClasses - List of Strings representing the method's parameters' classes &#10;## &#10;## You can configure the output class name using &quot;testClass&quot; variable below. &#10;## Here are some examples: &#10;## Test${entry.ClassName} - will produce TestSomeClass &#10;## ${entry.className}Test - will produce SomeClassTest &#10;## &#10;######################################################################################## &#10;## &#10;#macro (cap $strIn)$strIn.valueOf($strIn.charAt(0)).toUpperCase()$strIn.substring(1)#end &#10;## Iterate through the list and generate testcase for every entry. &#10;#foreach ($entry in $entryList) &#10;#set( $testClass=&quot;${entry.className}Test&quot;) &#10;## &#10;package test.$entry.packageName; &#10;&#10;import junit.framework.Test; &#10;import junit.framework.TestSuite; &#10;import junit.framework.TestCase; &#10;&#10;/** &#10;* ${entry.className} Tester. &#10;* &#10;* @author &lt;Authors name&gt; &#10;* @since &lt;pre&gt;$today&lt;/pre&gt; &#10;* @version 1.0 &#10;*/ &#10;public class $testClass extends TestCase { &#10;public $testClass(String name) { &#10;super(name); &#10;} &#10;&#10;public void setUp() throws Exception { &#10;super.setUp(); &#10;} &#10;&#10;public void tearDown() throws Exception { &#10;super.tearDown(); &#10;} &#10;&#10;#foreach($method in $entry.methodList) &#10;/** &#10;* &#10;* Method: $method.signature &#10;* &#10;*/ &#10;public void test#cap(${method.name})() throws Exception { &#10;//TODO: Test goes here... &#10;} &#10;&#10;#end &#10;&#10;#foreach($method in $entry.privateMethodList) &#10;/** &#10;* &#10;* Method: $method.signature &#10;* &#10;*/ &#10;public void test#cap(${method.name})() throws Exception { &#10;//TODO: Test goes here... &#10;#foreach($string in $method.reflectionCode) &#10;$string &#10;#end &#10;} &#10;&#10;#end &#10;&#10;public static Test suite() { &#10;return new TestSuite(${testClass}.class); &#10;} &#10;} &#10;#end" />
<entry key="JUnit 4" value="######################################################################################## &#10;## &#10;## Available variables: &#10;## $entryList.methodList - List of method composites &#10;## $entryList.privateMethodList - List of private method composites &#10;## $entryList.fieldList - ArrayList of class scope field names &#10;## $entryList.className - class name &#10;## $entryList.packageName - package name &#10;## $today - Todays date in MM/dd/yyyy format &#10;## &#10;## MethodComposite variables: &#10;## $method.name - Method Name &#10;## $method.signature - Full method signature in String form &#10;## $method.reflectionCode - list of strings representing commented out reflection code to access method (Private Methods) &#10;## $method.paramNames - List of Strings representing the method's parameters' names &#10;## $method.paramClasses - List of Strings representing the method's parameters' classes &#10;## &#10;## You can configure the output class name using &quot;testClass&quot; variable below. &#10;## Here are some examples: &#10;## Test${entry.ClassName} - will produce TestSomeClass &#10;## ${entry.className}Test - will produce SomeClassTest &#10;## &#10;######################################################################################## &#10;## &#10;#macro (cap $strIn)$strIn.valueOf($strIn.charAt(0)).toUpperCase()$strIn.substring(1)#end &#10;## Iterate through the list and generate testcase for every entry. &#10;#foreach ($entry in $entryList) &#10;#set( $testClass=&quot;${entry.className}Test&quot;) &#10;## &#10;package $entry.packageName; &#10;&#10;import org.junit.Test; &#10;import org.junit.Before; &#10;import org.junit.After; &#10;&#10;/** &#10;* ${entry.className} Tester. &#10;* &#10;* @author &lt;Authors name&gt; &#10;* @since &lt;pre&gt;$date&lt;/pre&gt; &#10;* @version 1.0 &#10;*/ &#10;public class $testClass { &#10;&#10;@Before&#10;public void before() throws Exception { &#10;} &#10;&#10;@After&#10;public void after() throws Exception { &#10;} &#10;&#10;#foreach($method in $entry.methodList) &#10;/** &#10;* &#10;* Method: $method.signature &#10;* &#10;*/ &#10;@Test&#10;public void test#cap(${method.name})() throws Exception { &#10;//TODO: Test goes here... &#10;} &#10;&#10;#end &#10;&#10;#foreach($method in $entry.privateMethodList) &#10;/** &#10;* &#10;* Method: $method.signature &#10;* &#10;*/ &#10;@Test&#10;public void test#cap(${method.name})() throws Exception { &#10;//TODO: Test goes here... &#10;#foreach($string in $method.reflectionCode) &#10;$string &#10;#end &#10;} &#10;&#10;#end &#10;} &#10;#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.3">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.3/commons-beanutils-1.9.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.3/commons-beanutils-1.9.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/commons-beanutils/commons-beanutils/1.9.3/commons-beanutils-1.9.3-sources.jar!/" />
</SOURCES>
</library>
<library name="Maven: commons-codec:commons-codec:1.9">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.9/commons-codec-1.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.9/commons-codec-1.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.9/commons-codec-1.9-sources.jar!/" />
</SOURCES>
</library>
<library name="Maven: commons-collections:commons-collections:3.2.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1-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.4">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.4/junit-4.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.4/junit-4.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.4/junit-4.4-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.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.5.2/httpclient-4.5.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.5.2/httpclient-4.5.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.5.2/httpclient-4.5.2-sources.jar!/" />
</SOURCES>
</library>
<library name="Maven: org.apache.httpcomponents:httpcore:4.4.4">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpcore/4.4.4/httpcore-4.4.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpcore/4.4.4/httpcore-4.4.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpcore/4.4.4/httpcore-4.4.4-sources.jar!/" />
</SOURCES>
</library>
</component>
</project>

View File

@ -1,92 +0,0 @@
<?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>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>net.sf.ezmorph</groupId>
<artifactId>ezmorph</artifactId>
<version>1.0.6</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</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>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<build>
<defaultGoal>compile</defaultGoal>
</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>

View File

@ -1,68 +0,0 @@
/*
* @Author: Kane
* @Date: 2022-03-16 18:10:58
* @LastEditors: Kane
* @LastEditTime: 2022-03-18 00:37:56
* @FilePath: \天气灾害预警\src\main\java\AppMain.java
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import com.cpic.xim.config.City;
import com.cpic.xim.notify.disaster.QWeatherDisasterWarning;
import com.cpic.xim.notify.disaster.WeatherDisasterWarningGrabber;
import com.cpic.xim.config.WeatherDisasterNotifyConfig;
import java.io.IOException;
import java.util.Vector;
public class AppMain
{
private static final String CONFIG_FILE_PATH = "./config.json";
public static void main( String[] args )
{
String cityCode = "101230201";
String json;
QWeatherDisasterWarning warning = null;
WeatherDisasterNotifyConfig config = null;
//读取配置
try
{
config = WeatherDisasterNotifyConfig.load( CONFIG_FILE_PATH );
}
catch ( IOException error )
{
System.out.println( "读取配置文件失败!" );
System.out.println( error.getMessage() );
return;
}
Vector<City> cities = config.getCities();
String queryURL = config.getQueryUrl();
String userKey = config.getKey();
//遍历所有城市查询是否有警报有则推送
for ( City city : cities )
{
try
{
json = WeatherDisasterWarningGrabber.getWeatherDisasterWarningJSON( queryURL,
userKey,
city.getCityCode() );
warning = WeatherDisasterWarningGrabber.convertWeatherDisasterWarning( json );
}
catch ( IOException error )
{
System.out.println( "查询" + city.getCityName() + "出现异常!");
System.out.println( error.getMessage() );
continue;
}
}
}
}

View File

@ -1,52 +0,0 @@
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;
}

View File

@ -1,52 +0,0 @@
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;
}

View File

@ -1,134 +0,0 @@
package com.cpic.xim.config;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Vector;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
public class WeatherDisasterNotifyConfig
{
private static final int BUFFER_SIZE = 1024;
public static WeatherDisasterNotifyConfig load( String filePath )
throws IOException
{
WeatherDisasterNotifyConfig config = null;
ObjectMapper mapper = new ObjectMapper();
FileReader configFile = null;
StringBuffer json = null;
char[] buffer = new char[BUFFER_SIZE];
//设置json属性
mapper.setPropertyNamingStrategy( PropertyNamingStrategy.SNAKE_CASE );
try{
configFile = new FileReader( filePath );
json = new StringBuffer();
int length = configFile.read( buffer );
while ( length != -1 )
{
json.append( buffer );
length = configFile.read( buffer );
}
config = mapper.readValue( json.toString(), WeatherDisasterNotifyConfig.class );
}
finally
{
if ( configFile != null )
{
try
{
configFile.close();
}
catch ( IOException e )
{
e.printStackTrace();
}
}
}
return config;
}
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 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;
}
private String title;
private String key;
private String queryUrl;
@JsonProperty("wechat_officalaccount_url")
private String wechatOfficalAccountURL;
private Vector<City> cities;
private Vector<CpicxmStuff> notifyStuffs;
}

View File

@ -1,52 +0,0 @@
package com.cpic.xim.config.db;
import java.util.Objects;
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 );
}
private String tableName;
private String tableDescription;
}

View File

@ -1,13 +0,0 @@
package com.cpic.xim.config.db;
import java.util.Vector;
public class OracleConfig
{
private String tnsName;
private String ipAddr;
private String jdbcURL;
private String userName;
private String password;
private Vector<DBTable> tables;
}

View File

@ -1,77 +0,0 @@
package com.cpic.xim.notify.disaster;
import java.util.Vector;
public class QWeatherDisasterWarning
{
public QWeatherDisasterWarning( String code,
String updateTime,
String fxLink,
Vector<QWeatherDisasterWarningItem> warning,
QWeatherDisasterWarningRefer refer )
{
this.code = code;
this.updateTime = updateTime;
this.fxLink = fxLink;
this.warning = warning;
this.refer = refer;
}
public QWeatherDisasterWarning() {}
public String getCode()
{
return code;
}
public void setCode( String code )
{
this.code = code;
}
public String getUpdateTime()
{
return updateTime;
}
public void setUpdateTime( String 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;
}
private String code;
private String updateTime;
private String fxLink;
private Vector<QWeatherDisasterWarningItem> warning;
private QWeatherDisasterWarningRefer refer;
}

View File

@ -1,212 +0,0 @@
package com.cpic.xim.notify.disaster;
import java.util.Objects;
import com.fasterxml.jackson.annotation.JsonFormat;
//import com.fasterxml.jackson.annotation.JsonIgnore;
public class QWeatherDisasterWarningItem
{
public QWeatherDisasterWarningItem() {}
public QWeatherDisasterWarningItem( String id,
String sender,
String 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 String getPubTime()
{
return pubTime;
}
public void setPubTime( String 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;
@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm")
private String 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;
}

View File

@ -1,41 +0,0 @@
/*
* @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;
}

View File

@ -1,131 +0,0 @@
/**
* @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;
}
}

View File

@ -1,299 +0,0 @@
package com.cpic.xim.wechat.officalAccount;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.*;
import java.net.URL;
import java.net.HttpURLConnection;
import java.nio.charset.StandardCharsets;
public class sendMessage
{
/**
* 向公众号推送通知消息接口文档参考 彭奕洁 编写消息发送接口调用文档
*
* @param wechatOfficalAccountURL 公众号接口网址
* @param title 通知的标题
* @param notifyType 通知类型
* @param notifyMessage 通知文本内容
*/
public static void sendNotifyMessage( String wechatOfficalAccountURL,
String title,
String notifyType,
String notifyMessage )
{
//设置推送内容
WechatOfficalAccountMessageParameter param = new WechatOfficalAccountMessageParameter();
param.setFirst( title );
param.setKeyword1( notifyType );
param.setKeyword1Color( "#ff0000" );
param.setKeyword2( notifyMessage );
//转换成json
ObjectMapper mapper;
String json = null;
try
{
mapper = new ObjectMapper();
mapper.setSerializationInclusion( JsonInclude.Include.NON_NULL );
json = mapper.writeValueAsString( param );
if ( json.isEmpty() )
{
}
System.out.println( json );
}
catch ( JsonProcessingException error )
{
error.printStackTrace();
return;
}
//推送数据
URL url;
HttpURLConnection connection = null;
StringBuilder result = new StringBuilder();
OutputStreamWriter out = null;
BufferedReader in = null;
try
{
url = new URL( wechatOfficalAccountURL );
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod( "POST" );
connection.setRequestProperty( "accept", "*/*" );
connection.setRequestProperty( "Connection", "Keep-Alive" );
connection.setRequestProperty( "Content-Type", "application/json" );
connection.setDoInput( true );
connection.setDoOutput( true );
connection.connect();
out = new OutputStreamWriter( connection.getOutputStream(), StandardCharsets.UTF_8 );
out.write( json );
out.flush();
in = new BufferedReader( new InputStreamReader( connection.getInputStream() ) );
String line = in.readLine();
while ( line != null )
{
result.append( line );
line = in.readLine();
}
}
catch ( Exception error )
{
error.printStackTrace();
}
finally
{
try
{
if ( in != null )
{
in.close();
}
if ( out != null )
{
out.close();
}
if ( connection != null )
{
connection.disconnect();
}
}
catch ( Exception error )
{
error.printStackTrace();
}
}
}
}
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;
}
}

View File

@ -1,24 +0,0 @@
package com.cpic.xim.wechat.officalAccount;
import org.junit.Test;
import static org.junit.Assert.*;
public class sendMessageTest
{
@Test
public void pushNotifyMessage()
{
String url = "https://cxxmwx.cpic.com.cn/app/index.php?i=2&c=entry&do=send_group_tpl_api&m=ok_tplmessage";
try
{
//sendMessage.sendNotifyMessage( url, "警报", "警报标题", "警报内容!" );
sendMessage.sendNotifyMessage( url, "警报", "警报标题", "警报内容!" );
}
catch ( Exception error )
{
fail("测试失败!");
}
}
}

View File

@ -3,6 +3,7 @@
"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": "厦门",
@ -12,22 +13,6 @@
"city_name": "同安",
"city_code": "101230202"
},
{
"city_name": "思明",
"city_code": "101230203"
},
{
"city_name": "海沧",
"city_code": "101230204"
},
{
"city_name": "湖里",
"city_code": "101230205"
},
{
"city_name": "集美",
"city_code": "101230206"
},
{
"city_name": "翔安",
"city_code": "101230207"

14
应用/1.0/db.json Normal file
View 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": "天气预警消息表"
}
]
}

View 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;

2
应用/1.0/run.bat Normal file
View File

@ -0,0 +1,2 @@
java -jar disaster_warning-1.0-SNAPSHOT-jar-with-dependencies.jar
pause

View File

@ -19,5 +19,5 @@
}
],
"refer": { "sources": ["12379"], "license": ["no commercial use"] },
"testURL": "https://devapi.qweather.com/v7/warning/now?key=fe9fa8eeeb6f4301a92541eed565dd15&location=101230608"
"testURL": "https://devapi.qweather.com/v7/warning/now?key=fe9fa8eeeb6f4301a92541eed565dd15&location=101230201"
}