Merge remote-tracking branch 'origin/zxn' into develop

# Conflicts:
#	.idea/workspace.xml
Qian^2
劝酒千百 9 months ago
commit 5076a9a840

@ -2,5 +2,7 @@
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>

@ -0,0 +1,20 @@
<?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>
</component>
</project>

@ -1,13 +0,0 @@
<component name="libraryTable">
<library name="Maven: junit:junit:4.12">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.12/junit-4.12.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.12/junit-4.12-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.12/junit-4.12-sources.jar!/" />
</SOURCES>
</library>
</component>

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: junit:junit:4.13.2">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.13.2/junit-4.13.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.13.2/junit-4.13.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.13.2/junit-4.13.2-sources.jar!/" />
</SOURCES>
</library>
</component>

@ -4,54 +4,201 @@
<option name="autoReloadType" value="ALL" />
</component>
<component name="ChangeListManager">
<list default="true" id="a7505764-040b-48e2-b2fc-8c5b579e595f" name="Default" comment="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成" />
<list default="true" id="a7505764-040b-48e2-b2fc-8c5b579e595f" name="Default" comment="编写1">
<change afterPath="$PROJECT_DIR$/.idea/jarRepositories.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__antlr_antlr_2_7_7.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__asm_asm_3_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_101tec_zkclient_0_3.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_alibaba_fastjson_1_1_41.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_clearspring_analytics_stream_2_7_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_esotericsoftware_kryo_kryo_2_21.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_esotericsoftware_minlog_minlog_1_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_esotericsoftware_reflectasm_reflectasm_shaded_1_07.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_4_3.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_4_3.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_4_3.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_scala_2_10_2_4_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_google_code_gson_gson_2_2_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_google_guava_guava_14_0_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_google_protobuf_protobuf_java_2_5_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_googlecode_javaewah_JavaEWAH_0_3_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_jolbox_bonecp_0_8_0_RELEASE.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_ning_compress_lzf_1_0_3.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_sun_jersey_jersey_client_1_9.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_sun_jersey_jersey_core_1_9.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_sun_jersey_jersey_server_1_9.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_thoughtworks_paranamer_paranamer_2_6.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_twitter_chill_2_10_0_5_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_twitter_chill_java_0_5_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_twitter_parquet_hadoop_bundle_1_6_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_typesafe_akka_akka_actor_2_10_2_3_11.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_typesafe_akka_akka_remote_2_10_2_3_11.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_typesafe_akka_akka_slf4j_2_10_2_3_11.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_typesafe_config_1_2_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__com_yammer_metrics_metrics_core_2_2_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_7_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__commons_beanutils_commons_beanutils_core_1_8_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__commons_cli_commons_cli_1_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__commons_codec_commons_codec_1_10.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__commons_configuration_commons_configuration_1_6.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__commons_dbcp_commons_dbcp_1_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__commons_digester_commons_digester_1_8.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__commons_httpclient_commons_httpclient_3_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__commons_io_commons_io_2_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__commons_lang_commons_lang_2_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__commons_logging_commons_logging_1_1_3.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__commons_net_commons_net_2_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__commons_pool_commons_pool_1_5_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__io_dropwizard_metrics_metrics_core_3_1_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__io_dropwizard_metrics_metrics_graphite_3_1_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__io_dropwizard_metrics_metrics_json_3_1_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__io_dropwizard_metrics_metrics_jvm_3_1_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__io_netty_netty_3_8_0_Final.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__io_netty_netty_all_4_0_29_Final.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__javax_activation_activation_1_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__javax_jdo_jdo_api_3_0_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__javax_servlet_servlet_api_2_5.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__javax_transaction_jta_1_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_2_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__javax_xml_stream_stax_api_1_0_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__javolution_javolution_5_5_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__jline_jline_2_12.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__joda_time_joda_time_2_5.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__junit_junit_4_13_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__log4j_apache_log4j_extras_1_2_17.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__log4j_log4j_1_2_17.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_6.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__net_hydromatic_eigenbase_properties_1_1_5.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__net_java_dev_jets3t_jets3t_0_7_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__net_jpountz_lz4_lz4_1_3_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__net_razorvine_pyrolite_4_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__net_sf_opencsv_opencsv_2_3.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__net_sf_py4j_py4j_0_8_2_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_antlr_ST4_4_0_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_antlr_antlr_runtime_3_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_antlr_stringtemplate_3_2_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_avro_avro_1_7_7.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_avro_avro_ipc_1_7_7.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_avro_avro_ipc_tests_1_7_7.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_avro_avro_mapred_hadoop2_1_7_7.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_calcite_calcite_avatica_1_2_0_incubating.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_calcite_calcite_core_1_2_0_incubating.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_calcite_calcite_linq4j_1_2_0_incubating.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_commons_commons_compress_1_4_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_3_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_commons_commons_math3_3_4_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_curator_curator_client_2_1_0_incubating.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_curator_curator_framework_2_4_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_curator_curator_recipes_2_4_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_derby_derby_10_10_2_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_directory_api_api_asn1_api_1_0_0_M20.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_directory_api_api_util_1_0_0_M20.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_directory_server_apacheds_i18n_2_0_0_M15.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_directory_server_apacheds_kerberos_codec_2_0_0_M15.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_hadoop_hadoop_annotations_2_6_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_hadoop_hadoop_auth_2_6_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_hadoop_hadoop_client_2_6_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_hadoop_hadoop_common_2_6_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_hadoop_hadoop_hdfs_2_6_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_hadoop_hadoop_mapreduce_client_app_2_6_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_hadoop_hadoop_mapreduce_client_common_2_6_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_hadoop_hadoop_mapreduce_client_core_2_6_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_hadoop_hadoop_mapreduce_client_jobclient_2_6_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_hadoop_hadoop_mapreduce_client_shuffle_2_6_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_hadoop_hadoop_yarn_api_2_6_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_hadoop_hadoop_yarn_client_2_6_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_hadoop_hadoop_yarn_common_2_6_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_hadoop_hadoop_yarn_server_common_2_6_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_3_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_3_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_ivy_ivy_2_4_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_kafka_kafka_2_10_0_8_2_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_kafka_kafka_clients_0_8_2_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_mesos_mesos_shaded_protobuf_0_21_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_parquet_parquet_column_1_7_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_parquet_parquet_common_1_7_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_parquet_parquet_encoding_1_7_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_parquet_parquet_format_2_3_0_incubating.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_parquet_parquet_generator_1_7_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_parquet_parquet_hadoop_1_7_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_parquet_parquet_jackson_1_7_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_spark_spark_catalyst_2_10_1_5_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_spark_spark_core_2_10_1_5_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_spark_spark_hive_2_10_1_5_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_spark_spark_launcher_2_10_1_5_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_spark_spark_network_common_2_10_1_5_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_spark_spark_network_shuffle_2_10_1_5_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_spark_spark_sql_2_10_1_5_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_spark_spark_streaming_2_10_1_5_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_spark_spark_streaming_kafka_2_10_1_5_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_spark_spark_unsafe_2_10_1_5_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_thrift_libfb303_0_9_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_thrift_libthrift_0_9_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_apache_zookeeper_zookeeper_3_4_5.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_codehaus_groovy_groovy_all_2_1_6.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_codehaus_jackson_jackson_jaxrs_1_9_13.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_codehaus_jackson_jackson_xc_1_9_13.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_codehaus_janino_commons_compiler_2_7_6.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_codehaus_janino_janino_2_7_8.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_datanucleus_datanucleus_api_jdo_3_2_6.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_datanucleus_datanucleus_core_3_2_10.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_datanucleus_datanucleus_rdbms_3_2_9.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_eclipse_jetty_orbit_javax_servlet_3_0_0_v201112011016.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_fusesource_leveldbjni_leveldbjni_all_1_8.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_htrace_htrace_core_3_0_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_iq80_snappy_snappy_0_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_jodd_jodd_core_3_5_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_json4s_json4s_ast_2_10_3_2_10.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_json4s_json4s_core_2_10_3_2_10.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_json4s_json4s_jackson_2_10_3_2_10.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_json_json_20090211.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_mortbay_jetty_jetty_util_6_1_26.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_objenesis_objenesis_1_2.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_roaringbitmap_RoaringBitmap_0_4_5.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_scala_lang_scala_compiler_2_10_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_scala_lang_scala_library_2_10_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_scala_lang_scala_reflect_2_10_4.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_scala_lang_scalap_2_10_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_10.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_10.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_10.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_slf4j_slf4j_log4j12_1_7_10.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_spark_project_hive_hive_exec_1_2_1_spark.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_spark_project_hive_hive_metastore_1_2_1_spark.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_spark_project_spark_unused_1_0_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_tachyonproject_tachyon_client_0_7_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_tachyonproject_tachyon_underfs_hdfs_0_7_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_tachyonproject_tachyon_underfs_local_0_7_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_tukaani_xz_1_0.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_uncommons_maths_uncommons_maths_1_2_2a.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__org_xerial_snappy_snappy_java_1_1_1_7.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__oro_oro_2_0_8.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__stax_stax_api_1_0_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__xerces_xercesImpl_2_9_1.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__xml_apis_xml_apis_1_3_04.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/libraries/Maven__xmlenc_xmlenc_0_52.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/compiler.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/compiler.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/encodings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/encodings.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/UserActionAnalyzePlatform.iml" beforeDir="false" afterPath="$PROJECT_DIR$/UserActionAnalyzePlatform.iml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/edu/hust/util/DateUtils.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hust/util/DateUtils.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/edu/hust/util/NumberUtils.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hust/util/NumberUtils.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/edu/hust/util/ParamUtils.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hust/util/ParamUtils.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/edu/hust/util/StringUtils.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hust/util/StringUtils.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/edu/hust/util/ValidUtils.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hust/util/ValidUtils.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/conf.properties" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/conf.properties" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/test/java/cn/edu/hust/utils/ParamUtilsTest.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/test/java/cn/edu/hust/utils/ParamUtilsTest.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="CodeInsightWorkspaceSettings">
<option name="optimizeImportsOnTheFly" value="true" />
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file leaf-file-name="UserVisitAnalyze.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/cn/edu/hust/session/UserVisitAnalyze.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-377">
<caret line="972" column="29" lean-forward="false" selection-start-line="972" selection-start-column="29" selection-end-line="972" selection-end-column="29" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="MockData.java" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/cn/edu/hust/mockData/MockData.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1482">
<caret line="93" column="50" lean-forward="false" selection-start-line="93" selection-start-column="50" selection-end-line="93" selection-end-column="50" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="README.md" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/README.md">
<provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
<state split_layout="FIRST">
<first_editor relative-caret-position="703">
<caret line="448" column="0" lean-forward="false" selection-start-line="448" selection-start-column="0" selection-end-line="448" selection-end-column="0" />
<folding />
</first_editor>
<second_editor />
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
@ -140,22 +287,23 @@
<detection-done>true</detection-done>
<sorting>DEFINITION_ORDER</sorting>
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
<component name="MavenImportPreferences">
<option name="generalSettings">
<MavenGeneralSettings>
<option name="pluginUpdatePolicy" value="UPDATE" />
</MavenGeneralSettings>
</option>
</component>
<component name="MavenRunner">
<option name="jreName" value="#JAVA_INTERNAL" />
<option name="vmOptions" value="-DarchetypeCatalog=internal" />
</component>
<component name="ProjectColorInfo">{
&quot;associatedIndex&quot;: 8
}</component>
<component name="ProjectFrameBounds" extendedState="6" fullScreen="true">
<option name="y" value="23" />
<option name="width" value="1440" />
<option name="height" value="873" />
</component>
<component name="ProjectId" id="2qIGAjeCDkRtAhv84xlx4MKRgUe" />
<component name="ProjectId" id="2qIZa6LwsYAbMkZ339KYRo8qH7x" />
<component name="ProjectInspectionProfilesVisibleTreeState">
<entry key="Project Default">
<profile-state>
@ -281,23 +429,17 @@
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;JUnit.ParamUtilsTest.test2.executor&quot;: &quot;Run&quot;,
&quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;git-widget-placeholder&quot;: &quot;zxr&quot;,
&quot;kotlin-language-version-configured&quot;: &quot;true&quot;,
&quot;last_opened_file_path&quot;: &quot;D:/git/project/UserActionAnalyzePlatform&quot;,
&quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
&quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
&quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
&quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
&quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;reference.settings.project.maven.repository.indices&quot;,
&quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
}
}</component>
<component name="PropertiesComponent">
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
<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" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="aspect.path.notification.shown" value="true" />
<property name="SearchEverywhereHistoryKey" value="wor&#9;FILE&#9;file:///Users/youyujie/Documents/UserActionAnalyzePlatform/.idea/libraries/Maven__org_apache_curator_curator_framework_2_4_0.xml" />
</component>
<component name="RecentsManager">
<key name="MoveClassesOrPackagesDialog.RECENTS_KEY">
<recent name="cn.edu.hust.dao" />
@ -308,7 +450,7 @@
<recent name="$PROJECT_DIR$/src/main/java/cn/edu/hust/until" />
</key>
</component>
<component name="RunManager" selected="JUnit.ParamUtilsTest.test2">
<component name="RunManager" selected="Application.UserVisitAnalyze">
<configuration default="true" type="Applet" factoryName="Applet">
<option name="HTML_USED" value="false" />
<option name="WIDTH" value="400" />
@ -316,12 +458,6 @@
<option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
<module />
</configuration>
<configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" factoryName="Plugin">
<module name="" />
<option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea" />
<option name="PROGRAM_PARAMETERS" />
<predefined_log_file id="idea.log" enabled="true" />
</configuration>
<configuration name="UserVisitAnalyze" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="cn.edu.hust.session.UserVisitAnalyze" />
<module name="UserActionAnalyzePlatform" />
@ -342,6 +478,17 @@
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration default="true" type="ArquillianJUnit" factoryName="" nameIsGenerated="true">
<option name="arquillianRunConfiguration">
<value>
<option name="containerStateName" value="" />
</value>
</option>
<option name="TEST_OBJECT" value="class" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="ParamUtilsTest.test2" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
<module name="UserActionAnalyzePlatform" />
<extension name="coverage">
@ -426,30 +573,33 @@
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType">
<module name="" />
<option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea" />
<option name="PROGRAM_PARAMETERS" />
<predefined_log_file enabled="true" id="idea.log" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<list>
<item itemvalue="Application.UserVisitAnalyze" />
<item itemvalue="JUnit.ParamUtilsTest.test2" />
<item itemvalue="JUnit.SessionAggrDao.test" />
<item itemvalue="JUnit.SessionDetailTest.testInsert" />
<item itemvalue="JUnit.SessionRandomExtractDaoTest.testBatchInsert" />
<item itemvalue="应用程序.UserVisitAnalyze" />
</list>
<recent_temporary>
<list>
<item itemvalue="JUnit.ParamUtilsTest.test2" />
<item itemvalue="Application.UserVisitAnalyze" />
<item itemvalue="JUnit.SessionRandomExtractDaoTest.testBatchInsert" />
<item itemvalue="JUnit.SessionDetailTest.testInsert" />
<item itemvalue="JUnit.SessionAggrDao.test" />
<item itemvalue="JUnit.ParamUtilsTest.test2" />
</list>
</recent_temporary>
</component>
<component name="SharedIndexes">
<attachedChunks>
<set>
<option value="jdk-13.0.14-azul-13.0.14-4caba194b151-0dc6e15b" />
</set>
</attachedChunks>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="SvnConfiguration">
<configuration />
</component>
@ -469,19 +619,7 @@
<workItem from="1529845795654" duration="7752000" />
<workItem from="1529887211212" duration="6851000" />
<workItem from="1529994772485" duration="146000" />
<workItem from="1734342536419" duration="3626000" />
<workItem from="1734346716326" duration="2420000" />
<workItem from="1734349398416" duration="1738000" />
<workItem from="1734352550638" duration="1153000" />
<workItem from="1734354068325" duration="860000" />
<workItem from="1734354940766" duration="9337000" />
<workItem from="1734364968190" duration="929000" />
<workItem from="1734365941294" duration="2674000" />
<workItem from="1734368738786" duration="983000" />
<workItem from="1734369961357" duration="171000" />
<workItem from="1734370148794" duration="42000" />
<workItem from="1734370421400" duration="115000" />
<workItem from="1734370647014" duration="90000" />
<workItem from="1734352117490" duration="6724000" />
</task>
<task id="LOCAL-00001" summary="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成">
<created>1529592741848</created>
@ -497,175 +635,28 @@
<option name="project" value="LOCAL" />
<updated>1529593229553</updated>
</task>
<task id="LOCAL-00003" summary="1.环境搭建完成&#10;2.相关的工具类编写完成111&#10;3.配置文件管理类编写完成">
<option name="closed" value="true" />
<created>1734351693404</created>
<task id="LOCAL-00003" summary="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成11">
<created>1734352510160</created>
<option name="number" value="00003" />
<option name="presentableId" value="LOCAL-00003" />
<option name="project" value="LOCAL" />
<updated>1734351693404</updated>
<updated>1734352510160</updated>
</task>
<task id="LOCAL-00004" summary="1.环境搭建完成&#10;2.相关的工具类编写完成111&#10;3.配置文件管理类编写完成111">
<option name="closed" value="true" />
<created>1734352975106</created>
<task id="LOCAL-00004" summary="编写">
<created>1734357362481</created>
<option name="number" value="00004" />
<option name="presentableId" value="LOCAL-00004" />
<option name="project" value="LOCAL" />
<updated>1734352975106</updated>
<updated>1734357362481</updated>
</task>
<task id="LOCAL-00005" summary="1.环境搭建完成&#10;2.相关的工具类编写完成111&#10;3.配置文件管理类编写完成111">
<option name="closed" value="true" />
<created>1734353193141</created>
<task id="LOCAL-00005" summary="编写1">
<created>1734361788229</created>
<option name="number" value="00005" />
<option name="presentableId" value="LOCAL-00005" />
<option name="project" value="LOCAL" />
<updated>1734353193141</updated>
</task>
<task id="LOCAL-00006" summary="1.环境搭建完成&#10;2.相关的工具类编写完成111&#10;3.配置文件管理类编写完成1111">
<option name="closed" value="true" />
<created>1734353269426</created>
<option name="number" value="00006" />
<option name="presentableId" value="LOCAL-00006" />
<option name="project" value="LOCAL" />
<updated>1734353269426</updated>
</task>
<task id="LOCAL-00007" summary="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成">
<option name="closed" value="true" />
<created>1734354775314</created>
<option name="number" value="00007" />
<option name="presentableId" value="LOCAL-00007" />
<option name="project" value="LOCAL" />
<updated>1734354775314</updated>
</task>
<task id="LOCAL-00008" summary="1.环境搭建完成&#10;2.相关的工具类编写完成11&#10;3.配置文件管理类编写完成11">
<option name="closed" value="true" />
<created>1734354900465</created>
<option name="number" value="00008" />
<option name="presentableId" value="LOCAL-00008" />
<option name="project" value="LOCAL" />
<updated>1734354900465</updated>
<updated>1734361788229</updated>
</task>
<task id="LOCAL-00009" summary="1.环境搭建完成&#10;2.相关的工具类编写完成11&#10;3.配置文件管理类编写完成11">
<option name="closed" value="true" />
<created>1734354969705</created>
<option name="number" value="00009" />
<option name="presentableId" value="LOCAL-00009" />
<option name="project" value="LOCAL" />
<updated>1734354969705</updated>
</task>
<task id="LOCAL-00010" summary="1.环境搭建完成11&#10;2.相关的工具类编写完成11&#10;3.配置文件管理类编写完成11">
<option name="closed" value="true" />
<created>1734357525655</created>
<option name="number" value="00010" />
<option name="presentableId" value="LOCAL-00010" />
<option name="project" value="LOCAL" />
<updated>1734357525655</updated>
</task>
<task id="LOCAL-00011" summary="1.环境搭建完成1&#10;2.相关的工具类编写完成1&#10;3.配置文件管理类编写完成1">
<option name="closed" value="true" />
<created>1734358371283</created>
<option name="number" value="00011" />
<option name="presentableId" value="LOCAL-00011" />
<option name="project" value="LOCAL" />
<updated>1734358371283</updated>
</task>
<task id="LOCAL-00012" summary="1.环境搭建完成11&#10;2.相关的工具类编写完成1&#10;3.配置文件管理类编写完成1">
<option name="closed" value="true" />
<created>1734360173676</created>
<option name="number" value="00012" />
<option name="presentableId" value="LOCAL-00012" />
<option name="project" value="LOCAL" />
<updated>1734360173676</updated>
</task>
<task id="LOCAL-00013" summary="1.环境搭建完成11&#10;2.相关的工具类编写完成11&#10;3.配置文件管理类编写完成11">
<option name="closed" value="true" />
<created>1734362412393</created>
<option name="number" value="00013" />
<option name="presentableId" value="LOCAL-00013" />
<option name="project" value="LOCAL" />
<updated>1734362412393</updated>
</task>
<task id="LOCAL-00014" summary="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成">
<option name="closed" value="true" />
<created>1734363163041</created>
<option name="number" value="00014" />
<option name="presentableId" value="LOCAL-00014" />
<option name="project" value="LOCAL" />
<updated>1734363163041</updated>
</task>
<task id="LOCAL-00015" summary="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成11">
<option name="closed" value="true" />
<created>1734363388179</created>
<option name="number" value="00015" />
<option name="presentableId" value="LOCAL-00015" />
<option name="project" value="LOCAL" />
<updated>1734363388179</updated>
</task>
<task id="LOCAL-00016" summary="1.环境搭建完成11&#10;2.相关的工具类编写完成11&#10;3.配置文件管理类编写完成11">
<option name="closed" value="true" />
<created>1734365844392</created>
<option name="number" value="00016" />
<option name="presentableId" value="LOCAL-00016" />
<option name="project" value="LOCAL" />
<updated>1734365844392</updated>
</task>
<task id="LOCAL-00017" summary="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成">
<option name="closed" value="true" />
<created>1734368636062</created>
<option name="number" value="00017" />
<option name="presentableId" value="LOCAL-00017" />
<option name="project" value="LOCAL" />
<updated>1734368636062</updated>
</task>
<task id="LOCAL-00018" summary="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成1">
<option name="closed" value="true" />
<created>1734369061766</created>
<option name="number" value="00018" />
<option name="presentableId" value="LOCAL-00018" />
<option name="project" value="LOCAL" />
<updated>1734369061766</updated>
</task>
<task id="LOCAL-00019" summary="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成1">
<option name="closed" value="true" />
<created>1734369482371</created>
<option name="number" value="00019" />
<option name="presentableId" value="LOCAL-00019" />
<option name="project" value="LOCAL" />
<updated>1734369482371</updated>
</task>
<task id="LOCAL-00020" summary="1.环境搭建完成&#10;2.相关的工具类编写完成11&#10;3.配置文件管理类编写完成1">
<option name="closed" value="true" />
<created>1734370121454</created>
<option name="number" value="00020" />
<option name="presentableId" value="LOCAL-00020" />
<option name="project" value="LOCAL" />
<updated>1734370121454</updated>
</task>
<task id="LOCAL-00021" summary="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成">
<option name="closed" value="true" />
<created>1734370179773</created>
<option name="number" value="00021" />
<option name="presentableId" value="LOCAL-00021" />
<option name="project" value="LOCAL" />
<updated>1734370179773</updated>
</task>
<task id="LOCAL-00022" summary="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成">
<option name="closed" value="true" />
<created>1734370518519</created>
<option name="number" value="00022" />
<option name="presentableId" value="LOCAL-00022" />
<option name="project" value="LOCAL" />
<updated>1734370518519</updated>
</task>
<task id="LOCAL-00023" summary="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成">
<option name="closed" value="true" />
<created>1734370728253</created>
<option name="number" value="00023" />
<option name="presentableId" value="LOCAL-00023" />
<option name="project" value="LOCAL" />
<updated>1734370728253</updated>
</task>
<option name="localTasksCounter" value="24" />
<option name="localTasksCounter" value="6" />
<servers />
</component>
<component name="TestHistory">
@ -780,20 +771,14 @@
</entry>
</map>
</option>
<option name="oldMeFiltersMigrated" value="true" />
</component>
<component name="VcsManagerConfiguration">
<MESSAGE value="1.环境搭建完成&#10;2.相关的工具类编写完成111&#10;3.配置文件管理类编写完成" />
<MESSAGE value="1.环境搭建完成&#10;2.相关的工具类编写完成111&#10;3.配置文件管理类编写完成111" />
<MESSAGE value="1.环境搭建完成&#10;2.相关的工具类编写完成111&#10;3.配置文件管理类编写完成1111" />
<MESSAGE value="1.环境搭建完成&#10;2.相关的工具类编写完成11&#10;3.配置文件管理类编写完成11" />
<MESSAGE value="1.环境搭建完成1&#10;2.相关的工具类编写完成1&#10;3.配置文件管理类编写完成1" />
<MESSAGE value="1.环境搭建完成11&#10;2.相关的工具类编写完成1&#10;3.配置文件管理类编写完成1" />
<MESSAGE value="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成11" />
<MESSAGE value="1.环境搭建完成11&#10;2.相关的工具类编写完成11&#10;3.配置文件管理类编写完成11" />
<MESSAGE value="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成1" />
<MESSAGE value="1.环境搭建完成&#10;2.相关的工具类编写完成11&#10;3.配置文件管理类编写完成1" />
<MESSAGE value="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成" />
<option name="LAST_COMMIT_MESSAGE" value="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成" />
<MESSAGE value="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成11" />
<MESSAGE value="编写" />
<MESSAGE value="编写1" />
<option name="LAST_COMMIT_MESSAGE" value="编写1" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/main/java/cn/edu/hust/conf/ConfigurationManager.java">

@ -8,6 +8,8 @@
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/main/test" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/${project.build.directory}/classes" />
<excludeFolder url="file://$MODULE_DIR$/${project.build.directory}/test-classes" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
@ -186,7 +188,7 @@
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.4.3" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.4.3" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.1.41" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" 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" />
</component>
</module>

@ -79,6 +79,12 @@
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>

@ -1,75 +1,83 @@
package cn.edu.hust.conf;
import java.io.InputStream;
import java.util.Properties;
/**
*
* :propertieskey/value
*/
public class ConfigurationManager {
private static Properties prop=new Properties();
/**
*
*/
static{
try
{
//通过类的加载器读取配置文件
InputStream is=ConfigurationManager.class.getClassLoader().getResourceAsStream("conf.properties");
//加载配置文件
prop.load(is);
}catch(Exception e)
{
e.printStackTrace();
}
}
/**
* keyvalue
* @param key
* @return
*/
public static String getProperty(String key)
{
return prop.getProperty(key);
}
/**
*
* @param key
* @return
*/
public static Integer getInteger(String key)
{
String value=getProperty(key);
try
{
Integer result=Integer.valueOf(value);
return result;
}
catch (Exception e)
{
e.printStackTrace();
}
return 0;
}
/**
*
* @param key
* @return
*/
public static Boolean getBoolean(String key)
{
String value=getProperty(key);
if("false".equals(value))
{
return false;
}
return true;
}
}
package cn.edu.hust.conf;//包
//
import java.io.InputStream;//申明
//
import java.util.Properties;//申明
//
//
//配置文件管理类
//主要的功能:从特定的properties文件中读取相应的key/value
//
public class ConfigurationManager { //
// 创建一个静态的Properties对象用于存储从配置文件中读取的配置信息
private static Properties prop = new Properties();// 创建一个静态的Properties对象用于存储从配置文件中读取的配置信息
//
//
// 通过静态代码块加载配置文件
//
static { //ha
try { //dd
// 通过类的加载器读取名为"conf.properties"的配置文件
InputStream is = ConfigurationManager.class.getClassLoader().getResourceAsStream("conf.properties");//加载
// 加载配置文件到Properties对象中
prop.load(is);//加载
} catch (Exception e)//kuaizai
// 捕获加载文件时的异常并打印错误堆栈信息
e.printStackTrace();//kuaizai
}//对象
} //
//编写过程
//编写过程
//
//通过指定的key获取value
// @param key 配置项的key
//@return 返回与key对应的value如果没有则返回null
//
public static String getProperty(String key) { //
// 使用Properties对象的getProperty方法获取指定key的值
return prop.getProperty(key); //
} //
//
//
// 获取整数变量
// @param key 配置项的key
// @return 返回与key对应的整数值如果转换失败则返回默认值0
//
public static Integer getInteger(String key) { //加载
// 获取key对应的字符串值
String value = getProperty(key);//
//
try { //
// 尝试将字符串值转换为整数
Integer result = Integer.valueOf(value);//
//
return result; //输出结果
//
} catch (Exception e) { //catch
// 捕获转换时的异常并打印错误堆栈信息
e.printStackTrace(); //e
//
}//
// 如果转换失败返回默认值0
return 0; //返回值
} //
//
//
//获取布尔型
// @param key 配置项的key
// @return 返回与key对应的布尔值如果值为"false"则返回false其他情况返回true
//
public static Boolean getBoolean(String key) { //
// 获取key对应的字符串值
String value = getProperty(key); //string
// 如果值为"false"不区分大小写则返回false
if ("false".equals(value)) { //错误
//返回值
return false; //返回错误结果
} //
// 默认返回true
return true; //返回正确
}//
//
}//
//完成

@ -1,64 +1,128 @@
package cn.edu.hust.constant;
public class Constants {
/**
*
*/
public static final String JDBC_DRIVER="jdbc.driver";
public static final String JDBC_URL="jdbc.url";
public static final String JDBC_USERNAME="jdbc.username";
public static final String JDBC_PSSWORD="jdbc.password";
public static final String JDBC_ACTIVE="jdbc.active";
/**
* Spark
*/
public static final String APP_NAME_SESSION="UserVisitAnalyze";
public static final String SPARK_LOCAL="spark_local";
public static final String FIELD_SESSIONID="sessionId";
public static final String FIELD_SERACH_KEYWORDS="searchKeywords";
public static final String FIELD_CLICK_CATEGORYIDS="clickCategoryIds";
public static final String FIELD_AGE="age";
public static final String FIELD_CITY="city";
public static final String FIELD_SEX="sex";
public static final String FIELD_PROFESSIONAL="professional";
public static final String FIELD_VISIT_LENGTH="visitLength";
public static final String FIELD_STEP_LENGTH="stepLength";
public static final String FIELD_START_TIME="startTime";
public static final String FIELD_CATEGORY_ID="categoryId";
public static final String FIELD_CLICK_CATEGORY="categoryId";
public static final String FIELD_ORDER_CATEGORY="clickCategory";
public static final String FIELD_PAY_CATEGORY="orderCategory";
/**
* Spark
*/
public static final String PARAM_STARTTIME ="startDate";
public static final String PARAM_ENDTIME ="endDate";
public static final String PARAM_STARTAGE ="startAge";
public static final String PARAM_ENDAGE ="endAge";
public static final String PARAM_PROFESSONALS ="professionals";
public static final String PARAM_CIYTIES ="cities";
public static final String PARAM_SEX ="sex";
public static final String PARAM_SERACH_KEYWORDS="searchKeywords";
public static final String PARAM_CLICK_CATEGORYIDS="clickCategoryIds";
public static final String SESSION_COUNT = "session_count";
public static final String TIME_PERIOD_1s_3s = "1s_3s";
public static final String TIME_PERIOD_4s_6s = "4s_6s";
public static final String TIME_PERIOD_7s_9s = "7s_9s";
public static final String TIME_PERIOD_10s_30s = "10s_30s";
public static final String TIME_PERIOD_30s_60s = "30s_60s";
public static final String TIME_PERIOD_1m_3m = "1m_3m";
public static final String TIME_PERIOD_3m_10m = "3m_10m";
public static final String TIME_PERIOD_10m_30m = "10m_30m";
public static final String TIME_PERIOD_30m = "30m";
public static final String STEP_PERIOD_1_3 = "1_3";
public static final String STEP_PERIOD_4_6 = "4_6";
public static final String STEP_PERIOD_7_9 = "7_9";
public static final String STEP_PERIOD_10_30 = "10_30";
public static final String STEP_PERIOD_30_60 = "30_60";
public static final String STEP_PERIOD_60 = "60";
}
//开始
package cn.edu.hust.constant;//申明
//
public class Constants { //
//
//
// 项目配置常量
//这些常量用于存储数据库连接的配置信息
//
public static final String JDBC_DRIVER="jdbc.driver"; // JDBC驱动类
//
public static final String JDBC_URL="jdbc.url"; // 数据库连接URL
//
public static final String JDBC_USERNAME="jdbc.username"; // 数据库用户名
//
public static final String JDBC_PSSWORD="jdbc.password"; // 数据库密码
//
public static final String JDBC_ACTIVE="jdbc.active"; // 数据库连接是否活跃
//
//
//
//Spark作业相关常量
// 这些常量用于存储Spark作业相关的配置信息、字段名等
//
public static final String APP_NAME_SESSION="UserVisitAnalyze"; // Spark应用名称用于标识作业
//
public static final String SPARK_LOCAL="spark_local"; // Spark本地模式的配置标识
//
public static final String FIELD_SESSIONID="sessionId"; // 用户会话ID字段名
//
public static final String FIELD_SERACH_KEYWORDS="searchKeywords"; // 搜索关键词字段名
//
public static final String FIELD_CLICK_CATEGORYIDS="clickCategoryIds"; // 点击的分类ID字段名
//
public static final String FIELD_AGE="age"; // 用户年龄字段名
//
public static final String FIELD_CITY="city"; // 用户所在城市字段名
//
public static final String FIELD_SEX="sex"; // 用户性别字段名
//
public static final String FIELD_PROFESSIONAL="professional"; // 用户职业字段名
//
public static final String FIELD_VISIT_LENGTH="visitLength"; // 访问时长字段名
//
public static final String FIELD_STEP_LENGTH="stepLength"; // 访问步长字段名
//
public static final String FIELD_START_TIME="startTime"; // 会话开始时间字段名
//
public static final String FIELD_CATEGORY_ID="categoryId"; // 分类ID字段名
//
public static final String FIELD_CLICK_CATEGORY="categoryId"; // 点击的分类字段名
//
public static final String FIELD_ORDER_CATEGORY="clickCategory"; // 订单分类字段名
//
public static final String FIELD_PAY_CATEGORY="orderCategory"; // 支付分类字段名
//
//
// Spark任务相关参数常量
// 这些常量用于存储Spark任务中的参数名称
//
public static final String PARAM_STARTTIME ="startDate"; // 起始日期参数
//
public static final String PARAM_ENDTIME ="endDate"; // 结束日期参数
//
public static final String PARAM_STARTAGE ="startAge"; // 起始年龄参数
//
public static final String PARAM_ENDAGE ="endAge"; // 结束年龄参数
//
public static final String PARAM_PROFESSONALS ="professionals"; // 专业参数
//
public static final String PARAM_CIYTIES ="cities"; // 城市参数
//
public static final String PARAM_SEX ="sex"; // 性别参数
//
public static final String PARAM_SERACH_KEYWORDS="searchKeywords"; // 搜索关键词参数
//
public static final String PARAM_CLICK_CATEGORYIDS="clickCategoryIds"; // 点击的分类ID参数
//
//
//
// 会话统计相关常量
//用于会话时长或访问步数的统计分类
//
public static final String SESSION_COUNT = "session_count"; // 会话统计
//
//
//
// 用户访问时长时间段常量
//用于标识用户访问时长的各个时间段
//
public static final String TIME_PERIOD_1s_3s = "1s_3s"; // 1秒到3秒的时长
//
public static final String TIME_PERIOD_4s_6s = "4s_6s"; // 4秒到6秒的时长
//
public static final String TIME_PERIOD_7s_9s = "7s_9s"; // 7秒到9秒的时长
//
public static final String TIME_PERIOD_10s_30s = "10s_30s"; // 10秒到30秒的时长
//
public static final String TIME_PERIOD_30s_60s = "30s_60s"; // 30秒到60秒的时长
//
public static final String TIME_PERIOD_1m_3m = "1m_3m"; // 1分钟到3分钟的时长
//
public static final String TIME_PERIOD_3m_10m = "3m_10m"; // 3分钟到10分钟的时长
//
public static final String TIME_PERIOD_10m_30m = "10m_30m"; // 10分钟到30分钟的时长
//
public static final String TIME_PERIOD_30m = "30m"; // 超过30分钟的时长
//
//
//
// 用户访问步数时间段常量
//用于标识用户的访问步数区间
//
public static final String STEP_PERIOD_1_3 = "1_3"; // 1步到3步的访问
//
public static final String STEP_PERIOD_4_6 = "4_6"; // 4步到6步的访问
//
public static final String STEP_PERIOD_7_9 = "7_9"; // 7步到9步的访问
//
public static final String STEP_PERIOD_10_30 = "10_30"; // 10步到30步的访问
//
public static final String STEP_PERIOD_30_60 = "30_60"; // 30步到60步的访问
//
public static final String STEP_PERIOD_60 = "60"; // 超过60步的访问
//
//
}//返回
//完成

@ -1,150 +1,226 @@
package cn.edu.hust.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
//开始
package cn.edu.hust.util;//申明
//
import java.text.ParseException;//申明
import java.text.SimpleDateFormat;//申明
import java.util.Calendar;//申明
import java.util.Date;//申明
//
/**
*
* @author Administrator
*
* @author Administrator111222
*
*/
public class DateUtils {
public static final SimpleDateFormat TIME_FORMAT =
public class DateUtils {//申明
//
// 时间格式化:年月日 时分秒
public static final SimpleDateFormat TIME_FORMAT =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static final SimpleDateFormat DATE_FORMAT =
//
// 日期格式化:年月日
public static final SimpleDateFormat DATE_FORMAT =
new SimpleDateFormat("yyyy-MM-dd");
public static ThreadLocal<SimpleDateFormat> simpleDateFormatThreadLocal=new ThreadLocal<SimpleDateFormat>(){
@Override
//
// ThreadLocal 用于线程安全地存储 SimpleDateFormat 实例
public static ThreadLocal<SimpleDateFormat> simpleDateFormatThreadLocal = new ThreadLocal<SimpleDateFormat>(){
//
@Override//
//
protected SimpleDateFormat initialValue() {
// 初始化 SimpleDateFormat 实例,格式为 yyyy-MM-dd HH:mm:ss
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
};
//
}//
//
};//
//
//
/**
*
* @param time1
* @param time2
* @return
* @return time1 time2 true false
*/
public static boolean before(String time1, String time2) {
try {
Date dateTime1 = TIME_FORMAT.parse(time1);
Date dateTime2 = TIME_FORMAT.parse(time2);
if(dateTime1.before(dateTime2)) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public static boolean before(String time1, String time2) {//申明
//
try {//申明
// 解析时间字符串为 Date 对象
Date dateTime1 = TIME_FORMAT.parse(time1);//解析字符串
//
Date dateTime2 = TIME_FORMAT.parse(time2);//解析字符串
//
// 判断 dateTime1 是否在 dateTime2 之前
if(dateTime1.before(dateTime2)) {//
//
return true;//返回正确
}//
} catch (Exception e) {//
//
e.printStackTrace(); // 捕获异常并打印堆栈信息
}//
//
return false; // 如果发生异常或判断结果不为 true返回 false
}//
//
//
/**
*
* @param time1
* @param time2
* @return
* @return time1 time2 true false
*/
public static boolean after(String time1, String time2) {
public static boolean after(String time1, String time2) {//
try {
Date dateTime1 = TIME_FORMAT.parse(time1);
Date dateTime2 = TIME_FORMAT.parse(time2);
if(dateTime1.after(dateTime2)) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
//
// 解析时间字符串为 Date 对象
Date dateTime1 = TIME_FORMAT.parse(time1);//解析字符串
//
Date dateTime2 = TIME_FORMAT.parse(time2);//解析字符串
//
//
// 判断 dateTime1 是否在 dateTime2 之后
if(dateTime1.after(dateTime2)) {//
//
return true;//返回正确
//
}//
//
} catch (Exception e) {//
//
e.printStackTrace(); // 捕获异常并打印堆栈信息
}//
//
return false; // 如果发生异常或判断结果不为 true返回 false
}
/**
*
* @param time1 1
* @param time2 2
* @return
* @return
*/
public static int minus(String time1, String time2) {
public static int minus(String time1, String time2) {//
//
try {
Date datetime1 = TIME_FORMAT.parse(time1);
Date datetime2 = TIME_FORMAT.parse(time2);
long millisecond = datetime1.getTime() - datetime2.getTime();
return Integer.valueOf(String.valueOf(millisecond / 1000));
} catch (Exception e) {
e.printStackTrace();
// 解析时间字符串为 Date 对象
Date datetime1 = TIME_FORMAT.parse(time1);// 解析时间字符串
//
Date datetime2 = TIME_FORMAT.parse(time2);// 解析时间字符串
//
//
// 计算时间差,单位为毫秒
long millisecond = datetime1.getTime() - datetime2.getTime();//计算时间差,单位为毫秒
//
// 转换为秒,并返回
return Integer.valueOf(String.valueOf(millisecond / 1000));//
//
} catch (Exception e) {//
//
e.printStackTrace(); // 捕获异常并打印堆栈信息
//
}
return 0;
return 0; // 如果发生异常,返回 0
//
}
/**
*
* @param datetime yyyy-MM-dd HH:mm:ss
* @return
* yyyy-MM-dd_HH
* @param datetime yyyy-MM-dd HH:mm:ss
* @return yyyy-MM-dd_HH
*/
public static String getDateHour(String datetime) {
String date = datetime.split(" ")[0];
String hourMinuteSecond = datetime.split(" ")[1];
String hour = hourMinuteSecond.split(":")[0];
return date + "_" + hour;
}
public static String getDateHour(String datetime) {//
// 获取日期部分yyyy-MM-dd
String date = datetime.split(" ")[0];//
// 获取时间部分HH:mm:ss
String hourMinuteSecond = datetime.split(" ")[1];//
// 获取小时部分
String hour = hourMinuteSecond.split(":")[0];//
// 返回格式化后的日期和小时
return date + "_" + hour;//
//
}
//
/**
* yyyy-MM-dd
* @return
* @return yyyy-MM-dd
*/
public static String getTodayDate() {
return DATE_FORMAT.format(new Date());
}
public static String getTodayDate() {//
//
// 获取当前日期并格式化
return DATE_FORMAT.format(new Date());//
//
}//
//
/**
* yyyy-MM-dd
* @return
* @return yyyy-MM-dd
*/
public static String getYesterdayDate() {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.DAY_OF_YEAR, -1);
Date date = cal.getTime();
return DATE_FORMAT.format(date);
}
public static String getYesterdayDate() {/
//
// 获取当前时间的 Calendar 实例
Calendar cal = Calendar.getInstance();//
//
// 设置当前时间
cal.setTime(new Date());//
//
// 当前日期减去一天
cal.add(Calendar.DAY_OF_YEAR, -1);//
//
//
// 获取昨天的日期
Date date = cal.getTime();//
//
// 格式化并返回昨天的日期
return DATE_FORMAT.format(date);//
}//
//
/**
* yyyy-MM-dd
* @param date Date
* @return
* @return
*/
public static String formatDate(Date date) {
return DATE_FORMAT.format(date);
public static String formatDate(Date date) {//
//
// 使用日期格式化器格式化 Date 对象
return DATE_FORMAT.format(date);//
//
}
/**
* yyyy-MM-dd HH:mm:ss
* @param date Date
* @return
* @return
*/
public static String formatTime(Date date) {
return TIME_FORMAT.format(date);
}
public static Date parseTime(String time)
{
try {
Date result=simpleDateFormatThreadLocal.get().parse(time);
simpleDateFormatThreadLocal.remove();
return result;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
public static String formatTime(Date date) {//
// 使用时间格式化器格式化 Date 对象
return TIME_FORMAT.format(date);//
//
}//
//
/**
* Date
* @param time yyyy-MM-dd HH:mm:ss
* @return Date
*/
public static Date parseTime(String time) {//
//
try {//
// 使用 ThreadLocal 提供的 SimpleDateFormat 解析时间字符串
//
Date result = simpleDateFormatThreadLocal.get().parse(time);//
//
// 移除 ThreadLocal 中的 SimpleDateFormat 实例
simpleDateFormatThreadLocal.remove();//
//
return result; // 返回解析后的 Date 对象
//
} catch (ParseException e) {//
//
e.printStackTrace(); // 捕获异常并打印堆栈信息
}//
return null; // 如果解析失败,返回 null
}//
//
}//
//

@ -1,23 +1,32 @@
package cn.edu.hust.util;
import java.math.BigDecimal;
//start
package cn.edu.hust.util; // 引入包,指定该类所在的包
//引入包,指定该类所在的包
import java.math.BigDecimal; // 导入 BigDecimal 类,用于高精度的浮点数运算
//引入包,指定该类所在的包
//s
/**
*
* @author Administrator
*
*
*/
public class NumberUtils {
public class NumberUtils {//
//s
//ss
//sss
//
/**
*
* @param num
* @param scale
* @return
* @param num
* @param scale
* @return
*/
public static double formatDouble(double num, int scale) {
BigDecimal bd = new BigDecimal(num);
return bd.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
public static double formatDouble(double num, int scale) {//shengming
//kellly
BigDecimal bd = new BigDecimal(num); // 将输入的数字转换为 BigDecimal 对象,以提高计算精度
//将输入的数字转换为 BigDecimal 对象,以提高计算精度
return bd.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue(); // 设置四舍五入的精度并返回对应的 double 值
//设置四舍五入的精度并返回对应的 double 值
}//
//
}//
//结束

@ -1,42 +1,60 @@
package cn.edu.hust.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
package cn.edu.hust.util; // 定义类所在的包名,方便包管理和组织
//
import com.alibaba.fastjson.JSONArray; // 引入 fastjson 库中的 JSONArray 类,用于处理 JSON 数组
// 引入 fastjson 库中的 JSONArray 类用于处理 JSON 数组
import com.alibaba.fastjson.JSONObject; // 引入 fastjson 库中的 JSONObject 类,用于处理 JSON 对象
// 引入 fastjson 库中的 JSONObject 类用于处理 JSON 对象
//
/**
*
* JSON
* @author Administrator
*
*/
public class ParamUtils {
public class ParamUtils {//
//
/**
* id
* @param args
* @return id
* @param args
* @return ID null
*/
public static Long getTaskIdFromArgs(String[] args) {
try {
if(args != null && args.length > 0) {
return Long.valueOf(args[0]);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
public static Long getTaskIdFromArgs(String[] args) { // 定义静态方法,接受命令行参数数组 args
//
try { // 尝试执行以下代码
//尝试
if(args != null && args.length > 0) { // 如果参数数组不为空且长度大于0
//
return Long.valueOf(args[0]); // 将第一个参数转化为 Long 类型并返回
//
}//
} catch (Exception e) { // 捕获任何异常
//
e.printStackTrace(); // 打印堆栈信息,便于调试
//
}//
return null; // 如果未能提取到有效的任务 ID则返回 null
//
}
//
/**
* JSON
* @param jsonObject JSON
* @return
* JSON
* @param jsonObject JSON
* @param field JSON
* @return null
*/
public static String getParam(JSONObject jsonObject, String field) {
JSONArray jsonArray = jsonObject.getJSONArray(field);
if(jsonArray != null && jsonArray.size() > 0) {
return jsonArray.getString(0);
}
return null;
}
}
public static String getParam(JSONObject jsonObject, String field) { // 定义静态方法,接受一个 JSON 对象和一个字段名
//
JSONArray jsonArray = jsonObject.getJSONArray(field); // 从 JSON 对象中获取指定字段的 JSON 数组
//
if(jsonArray != null && jsonArray.size() > 0) { // 如果该字段存在且 JSON 数组非空
//
return jsonArray.getString(0); // 返回 JSON 数组的第一个字符串值
//
}//测试完成
//
return null; // 如果字段不存在或数组为空,返回 null
//
}//
//
}//
//结束

@ -1,110 +1,152 @@
package cn.edu.hust.util;
//start
package cn.edu.hust.util; // 定义类所在的包名,便于组织和管理代码
//
/**
*
*
* @author Administrator
*
*/
public class StringUtils {
public class StringUtils {//尝试编写
//
/**
*
* @param str
* @return
* @return null true false
*/
public static boolean isEmpty(String str) {
return str == null || "".equals(str);
}
public static boolean isEmpty(String str) {//
//申明
return str == null || "".equals(str); // 如果字符串为 null 或者是空字符串,返回 true
//
}//
//
/**
*
* @param str
* @return
* @return null true false
*/
public static boolean isNotEmpty(String str) {
return str != null && !"".equals(str);
}
public static boolean isNotEmpty(String str) {//
//
return str != null && !"".equals(str); // 如果字符串非空且非 null返回 true
}//
//
/**
*
* @param str
* @return
* @return
*/
public static String trimComma(String str) {
if(str.startsWith(",")) {
str = str.substring(1);
}
if(str.endsWith(",")) {
str = str.substring(0, str.length() - 1);
}
return str;
}
public static String trimComma(String str) {//
//
if(str.startsWith(",")) { // 如果字符串以逗号开始
//
str = str.substring(1); // 去掉开头的逗号
}//
if(str.endsWith(",")) { // 如果字符串以逗号结束
//
str = str.substring(0, str.length() - 1); // 去掉结尾的逗号
}//
//
return str; // 返回处理后的字符串
}//
//
/**
*
* @param str
* @return
*
* @param str
* @return
*/
public static String fulfuill(String str) {
if(str.length() == 2) {
return str;
} else {
return "0" + str;
}
}
public static String fulfuill(String str) {//
//
if(str.length() == 2) { // 如果字符串已经是两位数字
//
return str; // 直接返回该字符串
//
} else {//
return "0" + str; // 否则,在前面加上一个零
//
}//
}//
//
/**
*
* @param str
* @param delimiter
* @param field
* @return
*
* str = "field1=value1|field2=value2"delimiter="|"field="field1"
* "value1"
* @param str
* @param delimiter
* @param field
* @return null
*/
public static String getFieldFromConcatString(String str,
String delimiter, String field) {
String[] fields = str.split(delimiter);
for(String concatField : fields) {
if(concatField.split("=").length==2) {
String fieldName = concatField.split("=")[0];
String fieldValue = concatField.split("=")[1];
if (fieldName.equals(field)) {
return fieldValue;
}
}
}
return null;
}
public static String getFieldFromConcatString(String str,//申明
//
String delimiter, String field) {//
String[] fields = str.split(delimiter); // 根据分隔符将字符串分割成数组
//
for(String concatField : fields) { // 遍历每个分割后的字段
//
if(concatField.split("=").length==2) { // 判断字段是否符合 "key=value" 形式
//
String fieldName = concatField.split("=")[0]; // 获取字段名
//
String fieldValue = concatField.split("=")[1]; // 获取字段值
//
if (fieldName.equals(field)) { // 如果字段名匹配
//
return fieldValue; // 返回该字段的值
//
}//
}//
}//
return null; // 如果没有找到匹配的字段,返回 null
//
}//
//
/**
*
* @param str
* @param delimiter
*
* str = "field1=value1|field2=value2"delimiter="|"field="field1"newFieldValue="newValue"
* "field1=newValue|field2=value2"
* @param str
* @param delimiter
* @param field
* @param newFieldValue field
* @return
* @param newFieldValue
* @return
*/
public static String setFieldInConcatString(String str,
String delimiter, String field, String newFieldValue) {
String[] fields = str.split(delimiter);
for(int i = 0; i < fields.length; i++) {
String fieldName = fields[i].split("=")[0];
if(fieldName.equals(field)) {
String concatField = fieldName + "=" + newFieldValue;
fields[i] = concatField;
break;
}
}
public static String setFieldInConcatString(String str,//申明
//
String delimiter, String field, String newFieldValue) {//
//
String[] fields = str.split(delimiter); // 根据分隔符将字符串分割成数组
//
for(int i = 0; i < fields.length; i++) { // 遍历每个字段
//
String fieldName = fields[i].split("=")[0]; // 获取字段名
//
if(fieldName.equals(field)) { // 如果字段名匹配
//
String concatField = fieldName + "=" + newFieldValue; // 创建新的字段
//
fields[i] = concatField; // 替换原字段
//
break; // 找到并修改后跳出循环
//
}//
}//
//
// 使用 StringBuffer 构建修改后的拼接字符串
StringBuffer buffer = new StringBuffer("");
for(int i = 0; i < fields.length; i++) {
buffer.append(fields[i]);
if(i < fields.length - 1) {
buffer.append("|");
}
}
return buffer.toString();
}
}
//
for(int i = 0; i < fields.length; i++) { // 遍历修改后的字段数组
//
buffer.append(fields[i]); // 将字段拼接到 buffer 中
//
if(i < fields.length - 1) { // 如果不是最后一个字段
//
buffer.append("|"); // 添加分隔符
//
}//
}//
//
return buffer.toString(); // 返回修改后的拼接字符串
//
}//
//
}//
//结束

@ -1,12 +1,15 @@
package cn.edu.hust.util;
//导入包
package cn.edu.hust.util;//
//
//
/**
*
*
* @author Administrator
*
*/
public class ValidUtils {
public class ValidUtils {//
//
/**
*
* @param data
@ -14,95 +17,162 @@ public class ValidUtils {
* @param parameter
* @param startParamField
* @param endParamField
* @return
* @return true false
*/
public static boolean between(String data, String dataField,
String parameter, String startParamField, String endParamField) {
String startParamFieldStr = StringUtils.getFieldFromConcatString(
parameter, "\\|", startParamField);
String endParamFieldStr = StringUtils.getFieldFromConcatString(
parameter, "\\|", endParamField);
if(startParamFieldStr == null || endParamFieldStr == null) {
return true;
}
int startParamFieldValue = Integer.valueOf(startParamFieldStr);
int endParamFieldValue = Integer.valueOf(endParamFieldStr);
String dataFieldStr = StringUtils.getFieldFromConcatString(
data, "\\|", dataField);
if(dataFieldStr != null) {
int dataFieldValue = Integer.valueOf(dataFieldStr);
if(dataFieldValue >= startParamFieldValue &&
dataFieldValue <= endParamFieldValue) {
return true;
} else {
return false;
}
}
return false;
}
public static boolean between(String data, String dataField,//
//
String parameter, String startParamField, String endParamField) {//尝试编写
// 获取参数中的起始范围值
String startParamFieldStr = StringUtils.getFieldFromConcatString(//
//
parameter, "\\|", startParamField);//
// 获取参数中的结束de范围值
// 获取参数中的结束范围值
String endParamFieldStr = StringUtils.getFieldFromConcatString(//
//
parameter, "\\|", endParamField);//
//
// 如果起始值或结束值为空,直接返回 true
if(startParamFieldStr == null || endParamFieldStr == null) {//
//
return true;//返回正确值
}//
//
// 将起始和结束值转换为整数
int startParamFieldValue = Integer.valueOf(startParamFieldStr);//
//转换
int endParamFieldValue = Integer.valueOf(endParamFieldStr);//
//转换
//
// 获取数据字段的值
String dataFieldStr = StringUtils.getFieldFromConcatString(//
//
data, "\\|", dataField);//
//
// 如果数据字段值不为空,进行范围校验
if(dataFieldStr != null) {//
//
int dataFieldValue = Integer.valueOf(dataFieldStr);//
// 校验数据字段值是否在指定范围内
if(dataFieldValue >= startParamFieldValue &&//
//
dataFieldValue <= endParamFieldValue) {//
//
return true;//返回
//
} else {//
//
return false; // 如果数据字段值超出范围,返回 false
//
}//
}//
//
// 如果数据字段值为空,返回 false
return false;//返回错误
//
}//
//
/**
*
* @param data
* @param dataField
* @param parameter
* @param paramField
* @return
* @return true false
*/
public static boolean in(String data, String dataField,
String parameter, String paramField) {
String paramFieldValue = StringUtils.getFieldFromConcatString(
parameter, "\\|", paramField);
if(paramFieldValue == null) {
return true;
}
String[] paramFieldValueSplited = paramFieldValue.split(",");
String dataFieldValue = StringUtils.getFieldFromConcatString(
data, "\\|", dataField);
if(dataFieldValue != null) {
//申明
public static boolean in(String data, String dataField,//申明
// 申明
// 申明
//申明
String parameter, String paramField) {//
//
// 获取参数字段的值
String paramFieldValue = StringUtils.getFieldFromConcatString(//
//
parameter, "\\|", paramField);//
//
// 如果参数字段值为空,直接返回 true
if(paramFieldValue == null) {//
//
return true;//
//
}//
// 将参数字段的值按逗号分隔成数组
String[] paramFieldValueSplited = paramFieldValue.split(",");//
//
//sdzf
// 获取数据字段的值
String dataFieldValue = StringUtils.getFieldFromConcatString(//
//
data, "\\|", dataField);//
//
// 如果数据字段值不为空,进行匹配校验
if(dataFieldValue != null) {//
//
// 将数据字段值按逗号分隔成数组
String[] dataFieldValueSplited = dataFieldValue.split(",");
for(String singleDataFieldValue : dataFieldValueSplited) {
for(String singleParamFieldValue : paramFieldValueSplited) {
if(singleDataFieldValue.equals(singleParamFieldValue)) {
return true;
}
}
}
}
return false;
}
//
// 遍历数据字段值和参数字段值,检查是否存在匹配
for(String singleDataFieldValue : dataFieldValueSplited) {//
//
for(String singleParamFieldValue : paramFieldValueSplited) {//
//
// 如果有一个匹配项,返回 true
if(singleDataFieldValue.equals(singleParamFieldValue)) {//
//
return true;//返回正确
}//
}//
}//
}//
//
// 如果没有任何匹配项,返回 false
return false;//返回错误
}//
//
/**
*
*
* @param data
* @param dataField
* @param parameter
* @param paramField
* @return
* @return true false
*/
public static boolean equal(String data, String dataField,
String parameter, String paramField) {
String paramFieldValue = StringUtils.getFieldFromConcatString(
parameter, "\\|", paramField);
if(paramFieldValue == null) {
return true;
}
String dataFieldValue = StringUtils.getFieldFromConcatString(
data, "\\|", dataField);
if(dataFieldValue != null) {
if(dataFieldValue.equals(paramFieldValue)) {
return true;
}
}
return false;
}
}
public static boolean equal(String data, String dataField,//申明
//
String parameter, String paramField) {//
//
// 获取参数字段的值
String paramFieldValue = StringUtils.getFieldFromConcatString(//
//
parameter, "\\|", paramField);//
// 如果参数字段值为空,直接返回 true
if(paramFieldValue == null) {//
//
return true;//返回正确
//
}//
//
// 获取数据字段的值
String dataFieldValue = StringUtils.getFieldFromConcatString(//
//
data, "\\|", dataField);//
//
// 如果数据字段值不为空,进行值匹配校验
if(dataFieldValue != null) {//
//
// 如果数据字段值等于参数字段的值,返回 true
if(dataFieldValue.equals(paramFieldValue)) {//
//
return true;//返回正确
//
}//
}//
// 如果数据字段值与参数字段值不匹配,返回 false
return false;//返回错误
}//
//
}//
//jieshu

@ -1,6 +1,13 @@
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://10.211.55.16:3306/BigDataPlatm?useUnicode=true&&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root
jdbc.active=20
spark.local=true;
#
jdbc.driver=com.mysql.jdbc.Driver # JDBC驱动类指定使用的数据库驱动这里是MySQL的JDBC驱动
#
jdbc.url=jdbc:mysql://10.211.55.16:3306/BigDataPlatm?useUnicode=true&&characterEncoding=UTF-8 # 数据库连接URL指定MySQL数据库的IP地址、端口、数据库名称及字符编码
#
jdbc.username=root # 数据库用户名连接数据库时使用的用户名这里是root
#
jdbc.password=root # 数据库密码连接数据库时使用的密码这里是root\
#
jdbc.active=20 # 数据库连接池的活跃连接数,表示数据库连接池中活跃连接的最大数量
#
spark.local=true; # Spark本地模式的配置表示是否使用Spark的本地模式来运行
#

@ -1,15 +1,17 @@
package cn.edu.hust.conf;
import org.junit.Test;
public class ConfigurationManagerTest {
/**
*
*/
@Test
public void getMethod()
{
System.out.println(ConfigurationManager.getProperty("key1"));
}
}
//开始
package cn.edu.hust.conf; // 导入包:配置管理相关的类
//
import org.junit.Test; // 导入JUnit的Test注解用于标识测试方法
//
public class ConfigurationManagerTest { // 定义测试类测试ConfigurationManager类的功能
//
//测试配置文件管理类 // 方法注释,表示该方法用于测试配置文件管理类
//
@Test // 使用JUnit的Test注解表示该方法为一个测试方法
//
public void getMethod() // 定义一个测试方法
{ //
System.out.println(ConfigurationManager.getProperty("key1")); // 打印从ConfigurationManager获取key1对应的属性值
}//
}//
//完成

@ -1,16 +1,28 @@
package cn.edu.hust.utils;
import cn.edu.hust.util.ParamUtils;
import com.alibaba.fastjson.JSONObject;
import org.junit.Test;
public class ParamUtilsTest {
@Test
public void test2()
{
String json="{\"startAge\":[\"10\"],\"endAge\":[\"34\"],\"startDate\":[\"2018-06-22\"],\"endDate\":[\"2018-06-22\"]}";
JSONObject param=JSONObject.parseObject(json);
//param.getJSONArray("startAge");
System.out.println(ParamUtils.getParam(param,"startDate"));
}
}
//开始
package cn.edu.hust.utils; // 定义类所在的包包名为cn.edu.hust.utils
//
import cn.edu.hust.util.ParamUtils; // 导入ParamUtils工具类假设该类中包含用于处理参数的实用方法
//
import com.alibaba.fastjson.JSONObject; // 导入fastjson库中的JSONObject类用于处理JSON数据
//
import org.junit.Test; // 导入JUnit的Test注解标识该方法为JUnit测试方法
//
//
public class ParamUtilsTest { // 定义测试类ParamUtilsTest主要用于测试ParamUtils类的方法
//
@Test // 使用JUnit的Test注解标识该方法为一个测试方法
//
public void test2() // 定义测试方法test2
//
{//
String json="{\"startAge\":[\"10\"],\"endAge\":[\"34\"],\"startDate\":[\"2018-06-22\"],\"endDate\":[\"2018-06-22\"]}"; // 定义一个JSON格式的字符串包含多个键值对其中包含了年龄范围和日期范围
//运行
JSONObject param=JSONObject.parseObject(json); // 将JSON字符串转换为JSONObject对象方便后续操作
//
//param.getJSONArray("startAge"); // 这行代码被注释掉了原本是获取JSON中的"startAge"数组
//
System.out.println(ParamUtils.getParam(param,"startDate")); // 调用ParamUtils类中的getParam方法获取"startDate"参数的值并输出到控制台
//
}//
}//
//结束
Loading…
Cancel
Save