admin
2020-07-25 251a533b9c12e7d423b31473721a59580cab5b58
将商品服务剥离出主项目
150个文件已删除
1 文件已重命名
19个文件已修改
2个文件已添加
5537 ■■■■■ 已修改文件
.idea/artifacts/service_goods_war_exploded.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/compiler.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__com_carrotsearch_hppc_0_7_1.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_10_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_10_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_10_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__com_fasterxml_jackson_dataformat_jackson_dataformat_cbor_2_10_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__com_fasterxml_jackson_dataformat_jackson_dataformat_smile_2_10_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__com_fasterxml_jackson_dataformat_jackson_dataformat_yaml_2_10_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_10_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_10_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_10_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__com_github_spullara_mustache_java_compiler_0_9_3.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__com_google_code_gson_gson_2_8_6.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_15.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__com_yeshi_goods_facade_0_0_1_SNAPSHOT.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__commons_codec_commons_codec_1_13.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__commons_pool_commons_pool_1_6.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__io_netty_netty_all_4_1_45_Final.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__io_netty_netty_tcnative_boringssl_static_2_0_28_Final.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_1.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__joda_time_joda_time_2_10_5.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__junit_junit_4_12.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__mysql_mysql_connector_java_8_0_19.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_10_6.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_10_6.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__net_minidev_json_smart_2_3.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_commons_commons_dbcp2_2_7_0.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_commons_commons_lang3_3_9.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_commons_commons_pool2_2_7_0.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_10.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_13.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_httpcomponents_httpcore_nio_4_4_13.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5_10.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_12_1.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_12_1.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_12_1.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_lucene_lucene_analyzers_common_7_7_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_lucene_lucene_backward_codecs_7_7_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_lucene_lucene_core_7_7_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_lucene_lucene_grouping_7_7_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_lucene_lucene_highlighter_7_7_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_lucene_lucene_join_7_7_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_lucene_lucene_memory_7_7_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_lucene_lucene_misc_7_7_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_lucene_lucene_queries_7_7_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_lucene_lucene_queryparser_7_7_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_lucene_lucene_sandbox_7_7_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_lucene_lucene_spatial3d_7_7_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_lucene_lucene_spatial_7_7_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_lucene_lucene_spatial_extras_7_7_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_lucene_lucene_suggest_7_7_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_30.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_30.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_30.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_aspectj_aspectjrt_1_9_5.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_aspectj_aspectjweaver_1_9_5.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_assertj_assertj_core_3_13_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_codehaus_groovy_groovy_2_5_9.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_elasticsearch_client_elasticsearch_rest_client_6_8_6.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_elasticsearch_client_elasticsearch_rest_high_level_client_6_8_6.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_elasticsearch_elasticsearch_6_8_6.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_elasticsearch_elasticsearch_cli_6_8_6.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_elasticsearch_elasticsearch_core_6_8_6.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_elasticsearch_elasticsearch_secure_sm_6_8_6.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_elasticsearch_elasticsearch_x_content_6_8_6.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_elasticsearch_plugin_aggs_matrix_stats_client_6_8_6.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_elasticsearch_plugin_lang_mustache_client_6_8_6.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_elasticsearch_plugin_parent_join_client_6_8_6.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_elasticsearch_plugin_rank_eval_client_6_8_6.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_freemarker_freemarker_2_3_29.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_hamcrest_hamcrest_2_1.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_hamcrest_hamcrest_core_2_1.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_18_Final.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_javassist_javassist_3_18_1_GA.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_1_Final.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_5_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_5_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_5_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_5_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_5_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_5_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_mockito_mockito_core_3_1_0.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_3_1_0.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_mongodb_bson_3_11_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_mongodb_mongo_java_driver_3_12_0.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_mongodb_mongodb_driver_3_11_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_mongodb_mongodb_driver_core_3_11_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_quartz_scheduler_quartz_2_3_2.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_30.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_30.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_30.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_boot_spring_boot_2_2_4_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_2_4_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_2_4_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_mongodb_2_2_4_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_2_4_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_2_4_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_2_4_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_2_4_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_validation_2_2_4_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_2_4_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_2_4_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_2_4_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_data_spring_data_commons_2_2_4_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_2_2_4_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_data_spring_data_mongodb_2_2_4_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_data_spring_data_redis_2_2_4_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_spring_aop_5_2_3_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_spring_aspects_5_2_3_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_spring_beans_5_2_3_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_spring_context_5_2_3_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_spring_context_support_5_2_3_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_spring_core_5_2_3_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_spring_expression_5_2_3_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_spring_jcl_5_2_3_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_spring_jdbc_5_2_3_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_spring_orm_5_2_3_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_spring_oxm_5_2_3_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_spring_test_5_2_3_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_spring_tx_5_2_3_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_spring_web_5_2_3_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_springframework_spring_webmvc_5_2_3_RELEASE.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_6_3.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/libraries/Maven__org_yaml_snakeyaml_1_25.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/modules.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-goods/pom.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
facade-goods/src/main/java/com/yeshi/goods/facade/utils/taobao/HaoDanKuApiUtil.java 886 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/GoodsController.java 696 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java 153 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/SystemEnum.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/SystemFunction.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/DynamicInfoJob.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/goods/FreeGoodsCouponJob.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/goods/HDKGoodsJob.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/goods/PullNewJob.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/manger/goods/ConvertLinkManager.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/manger/goods/TaoBaoLinkManager.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/TaoBaoConstant.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/suning/SuningApiUtil.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/vipshop/VipShopUtil.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-goods/.gitignore 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-goods/.idea/workspace.xml 828 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-goods/.mvn/wrapper/MavenWrapperDownloader.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-goods/.mvn/wrapper/maven-wrapper.jar 补丁 | 查看 | 原始文档 | blame | 历史
service-goods/.mvn/wrapper/maven-wrapper.properties 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-goods/mvnw 310 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-goods/mvnw.cmd 182 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-goods/pom.xml 275 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-goods/src/main/java/com/blks/goods/GoodsApplication.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-goods/src/main/java/com/blks/goods/dao/taobao/TaoBaoCouponCacheDao.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-goods/src/main/java/com/blks/goods/service/remote/TaoBaoCouponCacheServiceRemote.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-goods/src/main/resources/application.yml 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-goods/src/test/java/com/blks/goods/GoodsApplicationTests.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
utils/src/main/java/org/yeshi/utils/StringUtil.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/artifacts/service_goods_war_exploded.xml
@@ -93,6 +93,7 @@
          <element id="library" level="project" name="Maven: com.github.qcloudsms:qcloudsms:1.0.2" />
          <element id="library" level="project" name="Maven: org.json:json:20170516" />
          <element id="library" level="project" name="Maven: org.apache.httpcomponents:httpmime:4.5.10" />
          <element id="library" level="project" name="Maven: org.mongodb:mongo-java-driver:3.11.2" />
          <element id="library" level="project" name="Maven: org.springframework.data:spring-data-mongodb:2.2.4.RELEASE" />
          <element id="library" level="project" name="Maven: org.springframework.data:spring-data-commons:2.2.4.RELEASE" />
          <element id="library" level="project" name="Maven: org.springframework.data:spring-data-mongodb-cross-store:1.10.10.RELEASE" />
@@ -199,7 +200,6 @@
          <element id="library" level="project" name="Maven: org.mongodb:mongodb-driver:3.11.2" />
          <element id="library" level="project" name="Maven: org.mongodb:bson:3.11.2" />
          <element id="library" level="project" name="Maven: org.mongodb:mongodb-driver-core:3.11.2" />
          <element id="library" level="project" name="Maven: org.mongodb:mongo-java-driver:3.12.0" />
          <element id="library" level="project" name="Maven: org.hamcrest:hamcrest:2.1" />
          <element id="library" level="project" name="Maven: org.springframework:spring-core:5.2.3.RELEASE" />
          <element id="library" level="project" name="Maven: org.springframework:spring-jcl:5.2.3.RELEASE" />
.idea/compiler.xml
@@ -9,7 +9,6 @@
        <module name="facade-goods" />
        <module name="facede-common" />
        <module name="fanli" />
        <module name="service-goods" />
        <module name="utils" />
      </profile>
    </annotationProcessing>
.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml
File was deleted
.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml
File was deleted
.idea/libraries/Maven__com_carrotsearch_hppc_0_7_1.xml
File was deleted
.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml
File was deleted
.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_10_2.xml
File was deleted
.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_10_2.xml
File was deleted
.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_10_2.xml
File was deleted
.idea/libraries/Maven__com_fasterxml_jackson_dataformat_jackson_dataformat_cbor_2_10_2.xml
File was deleted
.idea/libraries/Maven__com_fasterxml_jackson_dataformat_jackson_dataformat_smile_2_10_2.xml
File was deleted
.idea/libraries/Maven__com_fasterxml_jackson_dataformat_jackson_dataformat_yaml_2_10_2.xml
File was deleted
.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_10_2.xml
File was deleted
.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_10_2.xml
File was deleted
.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_10_2.xml
File was deleted
.idea/libraries/Maven__com_github_spullara_mustache_java_compiler_0_9_3.xml
File was deleted
.idea/libraries/Maven__com_google_code_gson_gson_2_8_6.xml
File was deleted
.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml
File was deleted
.idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_15.xml
File was deleted
.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml
File was deleted
.idea/libraries/Maven__com_yeshi_goods_facade_0_0_1_SNAPSHOT.xml
New file
@@ -0,0 +1,15 @@
<component name="libraryTable">
  <library name="Maven: com.yeshi:goods.facade:0.0.1-SNAPSHOT">
    <CLASSES>
      <root url="jar://$MAVEN_REPOSITORY$/com/yeshi/goods.facade/0.0.1-SNAPSHOT/goods.facade-0.0.1-SNAPSHOT.jar!/" />
    </CLASSES>
    <JAVADOC>
      <root url="jar://$PROJECT_DIR$/facade-goods/goods.facade-0.0.1-SNAPSHOT-javadoc.jar!/" />
      <root url="jar://$MAVEN_REPOSITORY$/com/yeshi/goods.facade/0.0.1-SNAPSHOT/goods.facade-0.0.1-SNAPSHOT-javadoc.jar!/" />
    </JAVADOC>
    <SOURCES>
      <root url="jar://$PROJECT_DIR$/facade-goods/goods.facade-0.0.1-SNAPSHOT-sources.jar!/" />
      <root url="jar://$MAVEN_REPOSITORY$/com/yeshi/goods.facade/0.0.1-SNAPSHOT/goods.facade-0.0.1-SNAPSHOT-sources.jar!/" />
    </SOURCES>
  </library>
</component>
.idea/libraries/Maven__commons_codec_commons_codec_1_13.xml
File was deleted
.idea/libraries/Maven__commons_pool_commons_pool_1_6.xml
File was deleted
.idea/libraries/Maven__io_netty_netty_all_4_1_45_Final.xml
File was deleted
.idea/libraries/Maven__io_netty_netty_tcnative_boringssl_static_2_0_28_Final.xml
File was deleted
.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_1.xml
File was deleted
.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml
File was deleted
.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml
File was deleted
.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_2.xml
File was deleted
.idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml
File was deleted
.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml
File was deleted
.idea/libraries/Maven__joda_time_joda_time_2_10_5.xml
File was deleted
.idea/libraries/Maven__junit_junit_4_12.xml
File was deleted
.idea/libraries/Maven__mysql_mysql_connector_java_8_0_19.xml
File was deleted
.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_10_6.xml
File was deleted
.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_10_6.xml
File was deleted
.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml
File was deleted
.idea/libraries/Maven__net_minidev_json_smart_2_3.xml
File was deleted
.idea/libraries/Maven__org_apache_commons_commons_dbcp2_2_7_0.xml
File was deleted
.idea/libraries/Maven__org_apache_commons_commons_lang3_3_9.xml
File was deleted
.idea/libraries/Maven__org_apache_commons_commons_pool2_2_7_0.xml
File was deleted
.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_10.xml
File was deleted
.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_13.xml
File was deleted
.idea/libraries/Maven__org_apache_httpcomponents_httpcore_nio_4_4_13.xml
File was deleted
.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5_10.xml
File was deleted
.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_12_1.xml
File was deleted
.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_12_1.xml
File was deleted
.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_12_1.xml
File was deleted
.idea/libraries/Maven__org_apache_lucene_lucene_analyzers_common_7_7_2.xml
File was deleted
.idea/libraries/Maven__org_apache_lucene_lucene_backward_codecs_7_7_2.xml
File was deleted
.idea/libraries/Maven__org_apache_lucene_lucene_core_7_7_2.xml
File was deleted
.idea/libraries/Maven__org_apache_lucene_lucene_grouping_7_7_2.xml
File was deleted
.idea/libraries/Maven__org_apache_lucene_lucene_highlighter_7_7_2.xml
File was deleted
.idea/libraries/Maven__org_apache_lucene_lucene_join_7_7_2.xml
File was deleted
.idea/libraries/Maven__org_apache_lucene_lucene_memory_7_7_2.xml
File was deleted
.idea/libraries/Maven__org_apache_lucene_lucene_misc_7_7_2.xml
File was deleted
.idea/libraries/Maven__org_apache_lucene_lucene_queries_7_7_2.xml
File was deleted
.idea/libraries/Maven__org_apache_lucene_lucene_queryparser_7_7_2.xml
File was deleted
.idea/libraries/Maven__org_apache_lucene_lucene_sandbox_7_7_2.xml
File was deleted
.idea/libraries/Maven__org_apache_lucene_lucene_spatial3d_7_7_2.xml
File was deleted
.idea/libraries/Maven__org_apache_lucene_lucene_spatial_7_7_2.xml
File was deleted
.idea/libraries/Maven__org_apache_lucene_lucene_spatial_extras_7_7_2.xml
File was deleted
.idea/libraries/Maven__org_apache_lucene_lucene_suggest_7_7_2.xml
File was deleted
.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_30.xml
File was deleted
.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_30.xml
File was deleted
.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_30.xml
File was deleted
.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml
File was deleted
.idea/libraries/Maven__org_aspectj_aspectjrt_1_9_5.xml
File was deleted
.idea/libraries/Maven__org_aspectj_aspectjweaver_1_9_5.xml
File was deleted
.idea/libraries/Maven__org_assertj_assertj_core_3_13_2.xml
File was deleted
.idea/libraries/Maven__org_codehaus_groovy_groovy_2_5_9.xml
File was deleted
.idea/libraries/Maven__org_elasticsearch_client_elasticsearch_rest_client_6_8_6.xml
File was deleted
.idea/libraries/Maven__org_elasticsearch_client_elasticsearch_rest_high_level_client_6_8_6.xml
File was deleted
.idea/libraries/Maven__org_elasticsearch_elasticsearch_6_8_6.xml
File was deleted
.idea/libraries/Maven__org_elasticsearch_elasticsearch_cli_6_8_6.xml
File was deleted
.idea/libraries/Maven__org_elasticsearch_elasticsearch_core_6_8_6.xml
File was deleted
.idea/libraries/Maven__org_elasticsearch_elasticsearch_secure_sm_6_8_6.xml
File was deleted
.idea/libraries/Maven__org_elasticsearch_elasticsearch_x_content_6_8_6.xml
File was deleted
.idea/libraries/Maven__org_elasticsearch_plugin_aggs_matrix_stats_client_6_8_6.xml
File was deleted
.idea/libraries/Maven__org_elasticsearch_plugin_lang_mustache_client_6_8_6.xml
File was deleted
.idea/libraries/Maven__org_elasticsearch_plugin_parent_join_client_6_8_6.xml
File was deleted
.idea/libraries/Maven__org_elasticsearch_plugin_rank_eval_client_6_8_6.xml
File was deleted
.idea/libraries/Maven__org_freemarker_freemarker_2_3_29.xml
File was deleted
.idea/libraries/Maven__org_hamcrest_hamcrest_2_1.xml
File was deleted
.idea/libraries/Maven__org_hamcrest_hamcrest_core_2_1.xml
File was deleted
.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_18_Final.xml
File was deleted
.idea/libraries/Maven__org_javassist_javassist_3_18_1_GA.xml
File was deleted
.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_1_Final.xml
File was deleted
.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_5_2.xml
File was deleted
.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_5_2.xml
File was deleted
.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_5_2.xml
File was deleted
.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_5_2.xml
File was deleted
.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_5_2.xml
File was deleted
.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_5_2.xml
File was deleted
.idea/libraries/Maven__org_mockito_mockito_core_3_1_0.xml
File was deleted
.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_3_1_0.xml
File was deleted
.idea/libraries/Maven__org_mongodb_bson_3_11_2.xml
File was deleted
.idea/libraries/Maven__org_mongodb_mongo_java_driver_3_12_0.xml
File was deleted
.idea/libraries/Maven__org_mongodb_mongodb_driver_3_11_2.xml
File was deleted
.idea/libraries/Maven__org_mongodb_mongodb_driver_core_3_11_2.xml
File was deleted
.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml
File was deleted
.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml
File was deleted
.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml
File was deleted
.idea/libraries/Maven__org_quartz_scheduler_quartz_2_3_2.xml
File was deleted
.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml
File was deleted
.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_30.xml
File was deleted
.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_30.xml
File was deleted
.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_30.xml
File was deleted
.idea/libraries/Maven__org_springframework_boot_spring_boot_2_2_4_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_2_4_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_2_4_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_mongodb_2_2_4_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_2_4_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_2_4_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_2_4_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_2_4_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_validation_2_2_4_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_2_4_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_2_4_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_2_4_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_data_spring_data_commons_2_2_4_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_2_2_4_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_data_spring_data_mongodb_2_2_4_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_data_spring_data_redis_2_2_4_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_spring_aop_5_2_3_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_spring_aspects_5_2_3_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_spring_beans_5_2_3_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_spring_context_5_2_3_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_spring_context_support_5_2_3_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_spring_core_5_2_3_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_spring_expression_5_2_3_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_spring_jcl_5_2_3_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_spring_jdbc_5_2_3_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_spring_orm_5_2_3_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_spring_oxm_5_2_3_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_spring_test_5_2_3_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_spring_tx_5_2_3_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_spring_web_5_2_3_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_springframework_spring_webmvc_5_2_3_RELEASE.xml
File was deleted
.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_6_3.xml
File was deleted
.idea/libraries/Maven__org_yaml_snakeyaml_1_25.xml
File was deleted
.idea/modules.xml
@@ -6,7 +6,6 @@
      <module fileurl="file://$PROJECT_DIR$/facade-goods/facade-goods.iml" filepath="$PROJECT_DIR$/facade-goods/facade-goods.iml" />
      <module fileurl="file://$PROJECT_DIR$/facede-common/facede-common.iml" filepath="$PROJECT_DIR$/facede-common/facede-common.iml" />
      <module fileurl="file://$PROJECT_DIR$/fanli/fanli.iml" filepath="$PROJECT_DIR$/fanli/fanli.iml" />
      <module fileurl="file://$PROJECT_DIR$/service-goods/service-goods.iml" filepath="$PROJECT_DIR$/service-goods/service-goods.iml" />
      <module fileurl="file://$PROJECT_DIR$/utils/utils.iml" filepath="$PROJECT_DIR$/utils/utils.iml" />
    </modules>
  </component>
facade-goods/pom.xml
@@ -26,4 +26,8 @@
        </dependency>
    </dependencies>
    <build>
        <finalName>facade-goods</finalName>
    </build>
</project>
facade-goods/src/main/java/com/yeshi/goods/facade/utils/taobao/HaoDanKuApiUtil.java
File was renamed from fanli/src/main/java/com/yeshi/fanli/util/taobao/HaoDanKuApiUtil.java
@@ -1,443 +1,443 @@
package com.yeshi.fanli.util.taobao;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.yeshi.utils.HttpUtil;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.yeshi.goods.facade.dto.taobao.haodanku.HDKGoodsListResultDTO;
import com.yeshi.goods.facade.dto.taobao.haodanku.HDKSearchFilter;
import com.yeshi.goods.facade.dto.taobao.haodanku.HDKWXCircleContentDTO;
import com.yeshi.goods.facade.entity.taobao.haodanku.HDKGoodsDetail;
import com.yeshi.fanli.util.StringUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
 * 好单库API
 * @author Administrator
 *
 */
public class HaoDanKuApiUtil {
    private final static String API_KEY = "blks";
    private static HaoDanKuApiUtil instance;
    public static HaoDanKuApiUtil getInstance() {
        if (instance == null)
            instance = new HaoDanKuApiUtil();
        return instance;
    }
    private String baseGetRequest(String path, List<ParamsKeyValue> params) {
        params.add(0, new HaoDanKuApiUtil.ParamsKeyValue("apikey", API_KEY));
        String url = "http://v2.api.haodanku.com/" + path;
        for (ParamsKeyValue keyValue : params) {
            url += ("/" + keyValue.key + "/" + keyValue.value);
        }
        return HttpUtil.get(url);
    }
    private String basePostRequest(String url, List<ParamsKeyValue> params) {
        params.add(0, new HaoDanKuApiUtil.ParamsKeyValue("apikey", API_KEY));
        Map<String, String> parmasMap = new HashMap<>();
        for (ParamsKeyValue keyValue : params) {
            parmasMap.put(keyValue.key, keyValue.value);
        }
        return HttpUtil.post(url, parmasMap, null);
    }
    /**
     * 获取朋友圈API的内容
     * @Title: getSendWXCircleContent
     * @Description:
     * void 返回类型
     * @throws
     */
    public void getSendWXCircleContent(Integer minId) {
        if (minId == null)
            minId = 1;
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("min_id", minId + ""));
        String result = baseGetRequest("selected_item", params);
        System.out.println(result);
    }
    public String convertLink(Long auctionId, String pid, String activityId,String specialId,String relationId) {
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("itemid", auctionId + ""));
        params.add(new ParamsKeyValue("pid", pid));
        if(!StringUtil.isNullOrEmpty(specialId)){
            params.add(new ParamsKeyValue("special_id", specialId));
        }
        if(!StringUtil.isNullOrEmpty(relationId)){
            params.add(new ParamsKeyValue("relation_id", relationId));
        }
        if (activityId != null)
            params.add(new ParamsKeyValue("activityid", activityId));
        String result = basePostRequest("http://v2.api.haodanku.com/ratesurl", params);
        System.out.println(result);
        JSONObject resultData = JSONObject.fromObject(result);
        String link = "";
        if (resultData.optInt("code") == 1) {
            resultData = resultData.optJSONObject("data");
            link = resultData.optString("coupon_click_url");
            if (StringUtil.isNullOrEmpty(link)) {
                link = resultData.optString("item_url");
            }
        }
        return link;
    }
    /**
     * 商品列表
     * @Title: listGoods
     * @Description:
     * @param minId
     * @param catIds
     * @param pageSize
     * @return
     * HDKGoodsListResultDTO 返回类型
     * @throws
     */
    // 详情:https://www.haodanku.com/api/detail/show/1.html
    public HDKGoodsListResultDTO listGoods(Integer minId, List<Integer> catIds, int pageSize) {
        if (minId == null)
            minId = 1;
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("nav", 3 + ""));
        params.add(new ParamsKeyValue("back", pageSize + ""));
        params.add(new ParamsKeyValue("min_id", minId + ""));
        params.add(new ParamsKeyValue("sort", 0 + ""));
        if (catIds != null && catIds.size() > 0) {
            params.add(new ParamsKeyValue("cid", StringUtil.concat(catIds, ",")));
        }
        String result = baseGetRequest("itemlist", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 1) {
            Integer newMinId = resultData.optInt("min_id");
            Type type = new TypeToken<ArrayList<HDKGoodsDetail>>() {
            }.getType();
            List<HDKGoodsDetail> list = new Gson().fromJson(resultData.optJSONArray("data").toString(), type);
            return new HDKGoodsListResultDTO(list, newMinId);
        }
        return null;
    }
    /**
     * 商品列表筛选
     * @param filter
     * @return
     */
    public HDKGoodsListResultDTO queryList(HDKSearchFilter filter) {
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("back", filter.getBack() + ""));
        params.add(new ParamsKeyValue("min_id", filter.getMinId() + ""));
        params.add(new ParamsKeyValue("nav", filter.getNav() + ""));
        if (!StringUtil.isNullOrEmpty(filter.getCid()))
            params.add(new ParamsKeyValue("cid", filter.getCid()));
        if (filter.getPriceMin() != null)
            params.add(new ParamsKeyValue("price_min", filter.getPriceMin() + ""));
        if (filter.getPriceMax() != null)
            params.add(new ParamsKeyValue("price_max", filter.getPriceMax() + ""));
        if (filter.getSaleMin() != null)
            params.add(new ParamsKeyValue("sale_min", filter.getSaleMin() + ""));
        if (filter.getSaleMax() != null)
            params.add(new ParamsKeyValue("sale_max", filter.getSaleMax() + ""));
        if (filter.getCouponMin() != null)
            params.add(new ParamsKeyValue("coupon_min", filter.getCouponMin() + ""));
        if (filter.getCouponMax() != null)
            params.add(new ParamsKeyValue("coupon_max", filter.getCouponMax() + ""));
        if (filter.getTkratesMin()!= null)
            params.add(new ParamsKeyValue("tkrates_min", filter.getTkratesMin() + ""));
        if (filter.getTkratesMax() != null)
            params.add(new ParamsKeyValue("tkrates_max", filter.getTkratesMax() + ""));
        if (filter.getTkmoneyMin()!= null)
            params.add(new ParamsKeyValue("tkmoney_min", filter.getTkmoneyMin() + ""));
        if (filter.getItemType()!= null)
            params.add(new ParamsKeyValue("item_type", filter.getItemType() + ""));
        String result = baseGetRequest("itemlist", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 1) {
            Integer newMinId = resultData.optInt("min_id");
            Type type = new TypeToken<ArrayList<HDKGoodsDetail>>() {
            }.getType();
            List<HDKGoodsDetail> list = new Gson().fromJson(resultData.optJSONArray("data").toString(), type);
            return new HDKGoodsListResultDTO(list, newMinId);
        }
        return null;
    }
    /**
     * 商品爆单列表
     * @Title: listGoods
     * @Description:
     * @param minId
     * @param catIds
     * @param pageSize
     * @return
     * HDKGoodsListResultDTO 返回类型
     * @throws
     */
    public HDKGoodsListResultDTO listHotGoods(Integer minId, int pageSize, int saleType, List<Integer> catIds) {
        if (minId == null)
            minId = 1;
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("sale_type", saleType +""));
        params.add(new ParamsKeyValue("back", pageSize + ""));
        params.add(new ParamsKeyValue("min_id", minId + ""));
        params.add(new ParamsKeyValue("item_type", 1 + "")); // 是否只获取营销返利商品,1是,0否
        if (catIds != null && catIds.size() > 0) {
            params.add(new ParamsKeyValue("cid", StringUtil.concat(catIds, ",")));
        }
        String result = baseGetRequest("sales_list", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 1) {
            Integer newMinId = resultData.optInt("min_id");
            Type type = new TypeToken<ArrayList<HDKGoodsDetail>>() {
            }.getType();
            List<HDKGoodsDetail> list = new Gson().fromJson(resultData.optJSONArray("data").toString(), type);
            return new HDKGoodsListResultDTO(list, newMinId);
        }
        return null;
    }
    /**
     * 增量更新的商品
     * @Title: listAddGoods
     * @Description:
     * @param minId
     * @param startHour
     * @param endHour
     * @param pageSize
     * @return
     * HDKGoodsListResultDTO 返回类型
     * @throws
     */
    public HDKGoodsListResultDTO listAddGoods(Integer minId, int startHour, int endHour, int pageSize) {
        if (minId == null)
            minId = 1;
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("back", pageSize + ""));
        params.add(new ParamsKeyValue("min_id", minId + ""));
        params.add(new ParamsKeyValue("start", startHour + ""));
        params.add(new ParamsKeyValue("end", endHour + ""));
        String result = baseGetRequest("timing_items", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 1) {
            Integer newMinId = resultData.optInt("min_id");
            Type type = new TypeToken<ArrayList<HDKGoodsDetail>>() {
            }.getType();
            List<HDKGoodsDetail> list = new Gson().fromJson(resultData.optJSONArray("data").toString(), type);
            return new HDKGoodsListResultDTO(list, newMinId);
        }
        return null;
    }
    /**
     * 更新商品信息
     * @Title: listUpdateGoods
     * @Description:
     * @param minId
     * @param pageSize
     * void 返回类型
     * @throws
     */
    public HDKGoodsListResultDTO listUpdateGoods(Integer minId, int pageSize) {
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("back", pageSize + ""));
        params.add(new ParamsKeyValue("min_id", minId + ""));
        String result = baseGetRequest("update_item", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 1) {
            Integer newMinId = resultData.optInt("min_id");
            Type type = new TypeToken<ArrayList<HDKGoodsDetail>>() {
            }.getType();
            List<HDKGoodsDetail> list = new Gson().fromJson(resultData.optJSONArray("data").toString(), type);
            return new HDKGoodsListResultDTO(list, newMinId);
        }
        return null;
    }
    /**
     * 拉取失效商品
     * @Title: listInvalidGoods
     * @Description:
     * @param startHour
     * @param endHour
     * @return
     * List<Long> 返回类型
     * @throws
     */
    public List<Long> listInvalidGoods(int startHour, int endHour) {
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("start", startHour + ""));
        params.add(new ParamsKeyValue("end", endHour + ""));
        String result = baseGetRequest("get_down_items", params);
        JSONObject resultData = JSONObject.fromObject(result);
        List<Long> goodsIdList = new ArrayList<>();
        if (resultData.optInt("code") == 1) {
            JSONArray array = resultData.optJSONArray("data");
            for (int i = 0; i < array.size(); i++) {
                goodsIdList.add(array.optJSONObject(i).optLong("itemid"));
            }
        }
        return goodsIdList;
    }
    class ParamsKeyValue {
        String key;
        String value;
        public ParamsKeyValue(String key, String value) {
            super();
            this.key = key;
            this.value = value;
        }
    }
    public HDKGoodsListResultDTO  listSelected(Integer minId) {
        if (minId == null)
            minId = 1;
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("min_id", minId + ""));
        String result = baseGetRequest("selected_item", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 1) {
            JSONArray array = resultData.optJSONArray("data");
            if (array != null) {
                List<HDKWXCircleContentDTO> list = new ArrayList<>();
                for (int i = 0; i <array.size(); i ++) {
                     JSONObject item = array.optJSONObject(i);
                     HDKWXCircleContentDTO dto = new HDKWXCircleContentDTO();
                    dto.setTitle(item.optString("title"));
                    dto.setItemid(item.optString("itemid"));
                    dto.setItemtitle(item.optString("itemtitle"));
                    dto.setContent(item.optString("content"));
                    dto.setCopy_content(item.optString("copy_content"));
                    dto.setShow_content(item.optString("show_content"));
                    JSONArray imgArray = item.optJSONArray("itempic");
                    if (imgArray != null) {
                        List<String> imgList = new ArrayList<>();
                        for (int n = 0; n < imgArray.size(); n++) {
                            imgList.add(imgArray.optString(n));
                        }
                        dto.setItempic(imgList);
                    }
                    list.add(dto);
                }
                HDKGoodsListResultDTO dto = new HDKGoodsListResultDTO();
                dto.setList(list);
                dto.setMinId(minId);
                return dto;
            }
        }
        return null;
    }
    /**
     * 单品详情API
     * @param itemid
     * @return
     */
    public HDKGoodsDetail getItemDetail(String itemid) {
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("itemid", itemid));
        String result = baseGetRequest("item_detail", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 1) {
            Type type = new TypeToken<HDKGoodsDetail>() {}.getType();
            HDKGoodsDetail goodsDetail = new Gson().fromJson(resultData.optJSONObject("data").toString(), type);
            return goodsDetail;
        }
        return null;
    }
    /**
     * 精选低价包邮专区API
     * @param minId
     * @param pageSize
     * @return
     */
    public HDKGoodsListResultDTO getLowPricePinkageData(Integer minId, int pageSize, Integer typeNum) {
        if (minId == null)
            minId = 1;
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("min_id", minId +""));
        params.add(new ParamsKeyValue("back", pageSize + ""));
        params.add(new ParamsKeyValue("type", typeNum + ""));
        String result = baseGetRequest("low_price_Pinkage_data", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 1) {
            Integer newMinId = resultData.optInt("min_id");
            Type type = new TypeToken<ArrayList<HDKGoodsDetail>>() {
            }.getType();
            List<HDKGoodsDetail> list = new Gson().fromJson(resultData.optJSONArray("data").toString(), type);
            return new HDKGoodsListResultDTO(list, newMinId);
        }
        return null;
    }
    /**
     * 高佣专场商品API
     * @param minId
     * @param pageSize
     * @return
     */
    public HDKGoodsListResultDTO getHighitems(Integer minId, int pageSize, Integer catId) {
        if (minId == null)
            minId = 1;
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("min_id", minId +""));
        params.add(new ParamsKeyValue("back", pageSize + ""));
        if (catId != null)
            params.add(new ParamsKeyValue("cat_id", catId +""));
        String result = baseGetRequest("get_highitems", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 200) {
            Integer newMinId = resultData.optInt("min_id");
            Type type = new TypeToken<ArrayList<HDKGoodsDetail>>() {
            }.getType();
            List<HDKGoodsDetail> list = new Gson().fromJson(resultData.optJSONArray("data").toString(), type);
            return new HDKGoodsListResultDTO(list, newMinId);
        }
        return null;
    }
}
package com.yeshi.goods.facade.utils.taobao;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.yeshi.utils.HttpUtil;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.yeshi.goods.facade.dto.taobao.haodanku.HDKGoodsListResultDTO;
import com.yeshi.goods.facade.dto.taobao.haodanku.HDKSearchFilter;
import com.yeshi.goods.facade.dto.taobao.haodanku.HDKWXCircleContentDTO;
import com.yeshi.goods.facade.entity.taobao.haodanku.HDKGoodsDetail;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.yeshi.utils.StringUtil;
/**
 * 好单库API
 * @author Administrator
 *
 */
public class HaoDanKuApiUtil {
    private final static String API_KEY = "blks";
    private static HaoDanKuApiUtil instance;
    public static HaoDanKuApiUtil getInstance() {
        if (instance == null)
            instance = new HaoDanKuApiUtil();
        return instance;
    }
    private String baseGetRequest(String path, List<ParamsKeyValue> params) {
        params.add(0, new HaoDanKuApiUtil.ParamsKeyValue("apikey", API_KEY));
        String url = "http://v2.api.haodanku.com/" + path;
        for (ParamsKeyValue keyValue : params) {
            url += ("/" + keyValue.key + "/" + keyValue.value);
        }
        return HttpUtil.get(url);
    }
    private String basePostRequest(String url, List<ParamsKeyValue> params) {
        params.add(0, new HaoDanKuApiUtil.ParamsKeyValue("apikey", API_KEY));
        Map<String, String> parmasMap = new HashMap<>();
        for (ParamsKeyValue keyValue : params) {
            parmasMap.put(keyValue.key, keyValue.value);
        }
        return HttpUtil.post(url, parmasMap, null);
    }
    /**
     * 获取朋友圈API的内容
     * @Title: getSendWXCircleContent
     * @Description:
     * void 返回类型
     * @throws
     */
    public void getSendWXCircleContent(Integer minId) {
        if (minId == null)
            minId = 1;
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("min_id", minId + ""));
        String result = baseGetRequest("selected_item", params);
        System.out.println(result);
    }
    public String convertLink(Long auctionId, String pid, String activityId,String specialId,String relationId) {
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("itemid", auctionId + ""));
        params.add(new ParamsKeyValue("pid", pid));
        if(!StringUtil.isNullOrEmpty(specialId)){
            params.add(new ParamsKeyValue("special_id", specialId));
        }
        if(!StringUtil.isNullOrEmpty(relationId)){
            params.add(new ParamsKeyValue("relation_id", relationId));
        }
        if (activityId != null)
            params.add(new ParamsKeyValue("activityid", activityId));
        String result = basePostRequest("http://v2.api.haodanku.com/ratesurl", params);
        System.out.println(result);
        JSONObject resultData = JSONObject.fromObject(result);
        String link = "";
        if (resultData.optInt("code") == 1) {
            resultData = resultData.optJSONObject("data");
            link = resultData.optString("coupon_click_url");
            if (StringUtil.isNullOrEmpty(link)) {
                link = resultData.optString("item_url");
            }
        }
        return link;
    }
    /**
     * 商品列表
     * @Title: listGoods
     * @Description:
     * @param minId
     * @param catIds
     * @param pageSize
     * @return
     * HDKGoodsListResultDTO 返回类型
     * @throws
     */
    // 详情:https://www.haodanku.com/api/detail/show/1.html
    public HDKGoodsListResultDTO listGoods(Integer minId, List<Integer> catIds, int pageSize) {
        if (minId == null)
            minId = 1;
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("nav", 3 + ""));
        params.add(new ParamsKeyValue("back", pageSize + ""));
        params.add(new ParamsKeyValue("min_id", minId + ""));
        params.add(new ParamsKeyValue("sort", 0 + ""));
        if (catIds != null && catIds.size() > 0) {
            params.add(new ParamsKeyValue("cid", StringUtil.concat(catIds, ",")));
        }
        String result = baseGetRequest("itemlist", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 1) {
            Integer newMinId = resultData.optInt("min_id");
            Type type = new TypeToken<ArrayList<HDKGoodsDetail>>() {
            }.getType();
            List<HDKGoodsDetail> list = new Gson().fromJson(resultData.optJSONArray("data").toString(), type);
            return new HDKGoodsListResultDTO(list, newMinId);
        }
        return null;
    }
    /**
     * 商品列表筛选
     * @param filter
     * @return
     */
    public HDKGoodsListResultDTO queryList(HDKSearchFilter filter) {
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("back", filter.getBack() + ""));
        params.add(new ParamsKeyValue("min_id", filter.getMinId() + ""));
        params.add(new ParamsKeyValue("nav", filter.getNav() + ""));
        if (!StringUtil.isNullOrEmpty(filter.getCid()))
            params.add(new ParamsKeyValue("cid", filter.getCid()));
        if (filter.getPriceMin() != null)
            params.add(new ParamsKeyValue("price_min", filter.getPriceMin() + ""));
        if (filter.getPriceMax() != null)
            params.add(new ParamsKeyValue("price_max", filter.getPriceMax() + ""));
        if (filter.getSaleMin() != null)
            params.add(new ParamsKeyValue("sale_min", filter.getSaleMin() + ""));
        if (filter.getSaleMax() != null)
            params.add(new ParamsKeyValue("sale_max", filter.getSaleMax() + ""));
        if (filter.getCouponMin() != null)
            params.add(new ParamsKeyValue("coupon_min", filter.getCouponMin() + ""));
        if (filter.getCouponMax() != null)
            params.add(new ParamsKeyValue("coupon_max", filter.getCouponMax() + ""));
        if (filter.getTkratesMin()!= null)
            params.add(new ParamsKeyValue("tkrates_min", filter.getTkratesMin() + ""));
        if (filter.getTkratesMax() != null)
            params.add(new ParamsKeyValue("tkrates_max", filter.getTkratesMax() + ""));
        if (filter.getTkmoneyMin()!= null)
            params.add(new ParamsKeyValue("tkmoney_min", filter.getTkmoneyMin() + ""));
        if (filter.getItemType()!= null)
            params.add(new ParamsKeyValue("item_type", filter.getItemType() + ""));
        String result = baseGetRequest("itemlist", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 1) {
            Integer newMinId = resultData.optInt("min_id");
            Type type = new TypeToken<ArrayList<HDKGoodsDetail>>() {
            }.getType();
            List<HDKGoodsDetail> list = new Gson().fromJson(resultData.optJSONArray("data").toString(), type);
            return new HDKGoodsListResultDTO(list, newMinId);
        }
        return null;
    }
    /**
     * 商品爆单列表
     * @Title: listGoods
     * @Description:
     * @param minId
     * @param catIds
     * @param pageSize
     * @return
     * HDKGoodsListResultDTO 返回类型
     * @throws
     */
    public HDKGoodsListResultDTO listHotGoods(Integer minId, int pageSize, int saleType, List<Integer> catIds) {
        if (minId == null)
            minId = 1;
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("sale_type", saleType +""));
        params.add(new ParamsKeyValue("back", pageSize + ""));
        params.add(new ParamsKeyValue("min_id", minId + ""));
        params.add(new ParamsKeyValue("item_type", 1 + "")); // 是否只获取营销返利商品,1是,0否
        if (catIds != null && catIds.size() > 0) {
            params.add(new ParamsKeyValue("cid", StringUtil.concat(catIds, ",")));
        }
        String result = baseGetRequest("sales_list", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 1) {
            Integer newMinId = resultData.optInt("min_id");
            Type type = new TypeToken<ArrayList<HDKGoodsDetail>>() {
            }.getType();
            List<HDKGoodsDetail> list = new Gson().fromJson(resultData.optJSONArray("data").toString(), type);
            return new HDKGoodsListResultDTO(list, newMinId);
        }
        return null;
    }
    /**
     * 增量更新的商品
     * @Title: listAddGoods
     * @Description:
     * @param minId
     * @param startHour
     * @param endHour
     * @param pageSize
     * @return
     * HDKGoodsListResultDTO 返回类型
     * @throws
     */
    public HDKGoodsListResultDTO listAddGoods(Integer minId, int startHour, int endHour, int pageSize) {
        if (minId == null)
            minId = 1;
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("back", pageSize + ""));
        params.add(new ParamsKeyValue("min_id", minId + ""));
        params.add(new ParamsKeyValue("start", startHour + ""));
        params.add(new ParamsKeyValue("end", endHour + ""));
        String result = baseGetRequest("timing_items", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 1) {
            Integer newMinId = resultData.optInt("min_id");
            Type type = new TypeToken<ArrayList<HDKGoodsDetail>>() {
            }.getType();
            List<HDKGoodsDetail> list = new Gson().fromJson(resultData.optJSONArray("data").toString(), type);
            return new HDKGoodsListResultDTO(list, newMinId);
        }
        return null;
    }
    /**
     * 更新商品信息
     * @Title: listUpdateGoods
     * @Description:
     * @param minId
     * @param pageSize
     * void 返回类型
     * @throws
     */
    public HDKGoodsListResultDTO listUpdateGoods(Integer minId, int pageSize) {
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("back", pageSize + ""));
        params.add(new ParamsKeyValue("min_id", minId + ""));
        String result = baseGetRequest("update_item", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 1) {
            Integer newMinId = resultData.optInt("min_id");
            Type type = new TypeToken<ArrayList<HDKGoodsDetail>>() {
            }.getType();
            List<HDKGoodsDetail> list = new Gson().fromJson(resultData.optJSONArray("data").toString(), type);
            return new HDKGoodsListResultDTO(list, newMinId);
        }
        return null;
    }
    /**
     * 拉取失效商品
     * @Title: listInvalidGoods
     * @Description:
     * @param startHour
     * @param endHour
     * @return
     * List<Long> 返回类型
     * @throws
     */
    public List<Long> listInvalidGoods(int startHour, int endHour) {
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("start", startHour + ""));
        params.add(new ParamsKeyValue("end", endHour + ""));
        String result = baseGetRequest("get_down_items", params);
        JSONObject resultData = JSONObject.fromObject(result);
        List<Long> goodsIdList = new ArrayList<>();
        if (resultData.optInt("code") == 1) {
            JSONArray array = resultData.optJSONArray("data");
            for (int i = 0; i < array.size(); i++) {
                goodsIdList.add(array.optJSONObject(i).optLong("itemid"));
            }
        }
        return goodsIdList;
    }
    class ParamsKeyValue {
        String key;
        String value;
        public ParamsKeyValue(String key, String value) {
            super();
            this.key = key;
            this.value = value;
        }
    }
    public HDKGoodsListResultDTO  listSelected(Integer minId) {
        if (minId == null)
            minId = 1;
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("min_id", minId + ""));
        String result = baseGetRequest("selected_item", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 1) {
            JSONArray array = resultData.optJSONArray("data");
            if (array != null) {
                List<HDKWXCircleContentDTO> list = new ArrayList<>();
                for (int i = 0; i <array.size(); i ++) {
                     JSONObject item = array.optJSONObject(i);
                     HDKWXCircleContentDTO dto = new HDKWXCircleContentDTO();
                    dto.setTitle(item.optString("title"));
                    dto.setItemid(item.optString("itemid"));
                    dto.setItemtitle(item.optString("itemtitle"));
                    dto.setContent(item.optString("content"));
                    dto.setCopy_content(item.optString("copy_content"));
                    dto.setShow_content(item.optString("show_content"));
                    JSONArray imgArray = item.optJSONArray("itempic");
                    if (imgArray != null) {
                        List<String> imgList = new ArrayList<>();
                        for (int n = 0; n < imgArray.size(); n++) {
                            imgList.add(imgArray.optString(n));
                        }
                        dto.setItempic(imgList);
                    }
                    list.add(dto);
                }
                HDKGoodsListResultDTO dto = new HDKGoodsListResultDTO();
                dto.setList(list);
                dto.setMinId(minId);
                return dto;
            }
        }
        return null;
    }
    /**
     * 单品详情API
     * @param itemid
     * @return
     */
    public HDKGoodsDetail getItemDetail(String itemid) {
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("itemid", itemid));
        String result = baseGetRequest("item_detail", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 1) {
            Type type = new TypeToken<HDKGoodsDetail>() {}.getType();
            HDKGoodsDetail goodsDetail = new Gson().fromJson(resultData.optJSONObject("data").toString(), type);
            return goodsDetail;
        }
        return null;
    }
    /**
     * 精选低价包邮专区API
     * @param minId
     * @param pageSize
     * @return
     */
    public HDKGoodsListResultDTO getLowPricePinkageData(Integer minId, int pageSize, Integer typeNum) {
        if (minId == null)
            minId = 1;
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("min_id", minId +""));
        params.add(new ParamsKeyValue("back", pageSize + ""));
        params.add(new ParamsKeyValue("type", typeNum + ""));
        String result = baseGetRequest("low_price_Pinkage_data", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 1) {
            Integer newMinId = resultData.optInt("min_id");
            Type type = new TypeToken<ArrayList<HDKGoodsDetail>>() {
            }.getType();
            List<HDKGoodsDetail> list = new Gson().fromJson(resultData.optJSONArray("data").toString(), type);
            return new HDKGoodsListResultDTO(list, newMinId);
        }
        return null;
    }
    /**
     * 高佣专场商品API
     * @param minId
     * @param pageSize
     * @return
     */
    public HDKGoodsListResultDTO getHighitems(Integer minId, int pageSize, Integer catId) {
        if (minId == null)
            minId = 1;
        List<ParamsKeyValue> params = new ArrayList<HaoDanKuApiUtil.ParamsKeyValue>();
        params.add(new ParamsKeyValue("min_id", minId +""));
        params.add(new ParamsKeyValue("back", pageSize + ""));
        if (catId != null)
            params.add(new ParamsKeyValue("cat_id", catId +""));
        String result = baseGetRequest("get_highitems", params);
        JSONObject resultData = JSONObject.fromObject(result);
        if (resultData.optInt("code") == 200) {
            Integer newMinId = resultData.optInt("min_id");
            Type type = new TypeToken<ArrayList<HDKGoodsDetail>>() {
            }.getType();
            List<HDKGoodsDetail> list = new Gson().fromJson(resultData.optJSONArray("data").toString(), type);
            return new HDKGoodsListResultDTO(list, newMinId);
        }
        return null;
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/GoodsController.java
@@ -5,7 +5,10 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import com.yeshi.fanli.entity.SystemFunction;
import com.yeshi.fanli.exception.taobao.TaoBaoConvertLinkException;
import com.yeshi.fanli.service.manger.goods.TaoBaoLinkManager;
import com.yeshi.fanli.util.SystemInfoUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.yeshi.utils.JsonUtil;
@@ -52,396 +55,419 @@
@RequestMapping(value = "api/v1/goods")
public class GoodsController {
    @Resource
    private ShareGoodsService shareGoodsService;
    @Resource
    private ShareGoodsService shareGoodsService;
    @Resource
    private TBPidService tbPidService;
    @Resource
    private TBPidService tbPidService;
    @Resource
    private TaoBaoUnionConfigService taoBaoUnionConfigService;
    @Resource
    private TaoBaoUnionConfigService taoBaoUnionConfigService;
    @Resource
    private MonitorService monitorService;
    @Resource
    private MonitorService monitorService;
    @Resource
    private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
    @Resource
    private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
    @Resource
    private UserInfoService userInfoService;
    @Resource
    private UserInfoService userInfoService;
    @Resource
    private TaoBaoBuyRelationMapService taoBaoBuyRelationMapService;
    @Resource
    private TaoBaoBuyRelationMapService taoBaoBuyRelationMapService;
    @Resource
    private BusinessEmergent110Service businessEmergent110Service;
    @Resource
    private BusinessEmergent110Service businessEmergent110Service;
    @Resource
    private RecommendGoodsDeleteHistoryService recommendGoodsDeleteHistoryService;
    @Resource
    private RecommendGoodsDeleteHistoryService recommendGoodsDeleteHistoryService;
    @Resource
    private TLJBuyGoodsService tljBuyGoodsService;
    @Resource
    private TLJBuyGoodsService tljBuyGoodsService;
    @Resource
    private IntegralGetService integralGetService;
    @Resource
    private IntegralGetService integralGetService;
    @Resource
    private TaoBaoLinkManager taoBaoLinkManager;
    @Resource
    private TaoBaoLinkManager taoBaoLinkManager;
    private void doTaoLiJinBuy(AcceptData acceptData, Long uid, Long auctionId, PrintWriter out) {
        JSONObject data = new JSONObject();
        TaoBaoLink taoBaoLink = null;
        try {
            // 根据日期与商品ID查询
            TLJBuyGoods tljBuyGoods = tljBuyGoodsService.selectByAuctionIdAndDay(auctionId,
                    TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd"));
            if (tljBuyGoods == null) {
                out.print(JsonUtil.loadFalseResult(1, "商品不存在"));
                return;
            }
            String appKey = tljBuyGoods.getAppKey();
            TaoBaoUnionConfig config = taoBaoUnionConfigService.getConfigByAppKeyCache(appKey);
            if (config == null) {
                out.print(JsonUtil.loadFalseResult(2, "生成推广链接失败"));
                return;
            }
            TaoKeAppInfo app = new TaoKeAppInfo(config.getAppKey(), config.getAppSecret(), config.getDefaultPid());
            taoBaoLink = shareGoodsService.getTaoLiJinLinkForBuyWithOutFanLi(uid, auctionId, app);
        } catch (TaoLiJinCreateException e1) {
            out.print(JsonUtil.loadFalseResult(e1.getCode(), "淘礼金红包创建失败"));
            return;
        } catch (ShareGoodsException e) {
            out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMessage()));
            return;
        }
        data.put("native", true);
        JSONObject link = new JSONObject();
        link.put("clickUrl", taoBaoLink.getClickUrl());
        link.put("couponUrl", taoBaoLink.getCouponLink());
        data.put("type", 1);
        data.put("link", link);
        out.print(JsonUtil.loadTrueResult(data));
    private void doTaoLiJinBuy(AcceptData acceptData, Long uid, Long auctionId, PrintWriter out) {
        JSONObject data = new JSONObject();
        TaoBaoLink taoBaoLink = null;
        try {
            // 根据日期与商品ID查询
            TLJBuyGoods tljBuyGoods = tljBuyGoodsService.selectByAuctionIdAndDay(auctionId,
                    TimeUtil.getGernalTime(System.currentTimeMillis(), "yyyy-MM-dd"));
            if (tljBuyGoods == null) {
                out.print(JsonUtil.loadFalseResult(1, "商品不存在"));
                return;
            }
            String appKey = tljBuyGoods.getAppKey();
            TaoBaoUnionConfig config = taoBaoUnionConfigService.getConfigByAppKeyCache(appKey);
            if (config == null) {
                out.print(JsonUtil.loadFalseResult(2, "生成推广链接失败"));
                return;
            }
            TaoKeAppInfo app = new TaoKeAppInfo(config.getAppKey(), config.getAppSecret(), config.getDefaultPid());
            taoBaoLink = shareGoodsService.getTaoLiJinLinkForBuyWithOutFanLi(uid, auctionId, app);
        } catch (TaoLiJinCreateException e1) {
            out.print(JsonUtil.loadFalseResult(e1.getCode(), "淘礼金红包创建失败"));
            return;
        } catch (ShareGoodsException e) {
            out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMessage()));
            return;
        }
        data.put("native", true);
        JSONObject link = new JSONObject();
        link.put("clickUrl", taoBaoLink.getClickUrl());
        link.put("couponUrl", taoBaoLink.getCouponLink());
        data.put("type", 1);
        data.put("link", link);
        out.print(JsonUtil.loadTrueResult(data));
        integralGetService.addTaoLiJinBuy(uid, auctionId);
    }
        integralGetService.addTaoLiJinBuy(uid, auctionId);
    }
    /**
     * 获取淘宝的分享链接
     *
     * @param acceptData
     * @param uid
     *            -用户ID
     * @param auctionId-商品ID
     * @param out
     */
    @RequestMapping(value = "gettaobaolink")
    public void getTaoBaoLink(AcceptData acceptData, Long uid, Long auctionId, String from, String source,
            HttpServletRequest request, PrintWriter out) {
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
            return;
        }
        UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
        if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
            out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
            return;
        }
    private void getTaoBaoLinkWithoutFanLi(AcceptData acceptData, Long auctionId, String from, String source,
                                           HttpServletRequest request, PrintWriter out) {
        try {
            TaoBaoLink taoBaoLink = taoBaoLinkManager.getTaoBaoLinkForRecieveCoupon(auctionId, null, TaoBaoConstant.TAOBAO_COUPON_PID);
            JSONObject data = new JSONObject();
            JSONObject link = new JSONObject();
            link.put("clickUrl", taoBaoLink.getClickUrl());
            link.put("couponUrl", taoBaoLink.getCouponLink());
            data.put("type", 1);
            data.put("link", link);
            data.put("native", true);
            out.print(JsonUtil.loadTrueResult(data));
        } catch (TaoBaoConvertLinkException e) {
            e.printStackTrace();
            out.print(JsonUtil.loadFalseResult("领券出错"));
        }
    }
        if (auctionId == null || auctionId <= 0) {
            out.print(JsonUtil.loadFalseResult(2, "商品ID不能为空"));
            return;
        }
    /**
     * 获取淘宝的分享链接
     *
     * @param acceptData
     * @param uid            -用户ID
     * @param auctionId-商品ID
     * @param out
     */
    @RequestMapping(value = "gettaobaolink")
    public void getTaoBaoLink(AcceptData acceptData, Long uid, Long auctionId, String from, String source,
                              HttpServletRequest request, PrintWriter out) {
        try {
            // 日志记录
            String info = String.format("type=buy&uid=%s&goodsId=%s&source=%s&goodsType=%s", uid, auctionId, source,
                    Constant.SOURCE_TYPE_TAOBAO);
            LogHelper.orderInfo(info);
        } catch (Exception e) {
        }
        if (auctionId == null || auctionId <= 0) {
            out.print(JsonUtil.loadFalseResult(2, "商品ID不能为空"));
            return;
        }
        TaoBaoGoodsBrief goods = null;
        if (!SystemInfoUtil.hasFunctions(acceptData.getSystem(), SystemFunction.fanli)) {
            getTaoBaoLinkWithoutFanLi(acceptData, auctionId, from, source, request, out);
            return;
        }
        try {
            goods = TaoKeApiUtil.getSimpleGoodsInfo(auctionId);
        } catch (TaobaoGoodsDownException e) {
            out.print(JsonUtil.loadFalseResult(3, "商品已下架"));
            return;
        } catch (Exception e) {
            try {
                LogHelper.errorDetailInfo(e, "获取商品简版详情出错", auctionId + "");
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
            return;
        }
        if ("taolijin_buy".equalsIgnoreCase(source)) {
            doTaoLiJinBuy(acceptData, uid, auctionId, out);
            return;
        }
        ClientTBPid clientTBPid = null;
        UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
        if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
            out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
            return;
        }
        String dpid = null;
        if (TaoBaoUtil.isSpecialGoods(goods.getMaterialLibType())) {
            dpid = TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT;
        } else {
            dpid = TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID;
        }
        String psiteId = dpid.split("_")[2];
        String padzoneId = dpid.split("_")[3];
        TaoBaoUnionConfig config1 = taoBaoUnionConfigService.getConfigByAppIdCache(psiteId);
        clientTBPid = new ClientTBPid(config1.getAppKey(), dpid, psiteId, padzoneId);
        try {
            // 日志记录
            String info = String.format("type=buy&uid=%s&goodsId=%s&source=%s&goodsType=%s", uid, auctionId, source,
                    Constant.SOURCE_TYPE_TAOBAO);
            LogHelper.orderInfo(info);
        } catch (Exception e) {
        }
        JSONObject data = new JSONObject();
        boolean isNative = false;
        String pid = null;
        TaoBaoGoodsBrief goods = null;
        boolean specialConvert = false;
        try {
            goods = TaoKeApiUtil.getSimpleGoodsInfo(auctionId);
        } catch (TaobaoGoodsDownException e) {
            out.print(JsonUtil.loadFalseResult(3, "商品已下架"));
            return;
        } catch (Exception e) {
            try {
                LogHelper.errorDetailInfo(e, "获取商品简版详情出错", auctionId + "");
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
        if (TaoBaoUtil.isSpecialGoods(goods.getMaterialLibType())) {
            specialConvert = true;
        } else
            specialConvert = false;
        if ("taolijin_buy".equalsIgnoreCase(source)) {
            doTaoLiJinBuy(acceptData, uid, auctionId, out);
            return;
        }
        String specialId = null;
        String relationId = null;
        // 查询用户ID是否绑定了会员运营ID
        UserExtraTaoBaoInfo userInfo = userExtraTaoBaoInfoService.getByUid(uid);
        if (userInfo != null && !StringUtil.isNullOrEmpty(userInfo.getSpecialId()) && userInfo.getSpecialValid() != null
                && userInfo.getSpecialValid() == true) {
            specialId = userInfo.getSpecialId();
            relationId = userInfo.getRelationId();
            // 已经绑定
            if (specialConvert) {
                isNative = true;
            } else
                isNative = false;
        ClientTBPid clientTBPid = null;
            pid = TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT;
        String dpid = null;
        if (TaoBaoUtil.isSpecialGoods(goods.getMaterialLibType())) {
            dpid = TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT;
        } else {
            dpid = TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID;
        }
        String psiteId = dpid.split("_")[2];
        String padzoneId = dpid.split("_")[3];
        TaoBaoUnionConfig config1 = taoBaoUnionConfigService.getConfigByAppIdCache(psiteId);
        clientTBPid = new ClientTBPid(config1.getAppKey(), dpid, psiteId, padzoneId);
        } else {// 尚未绑定
            isNative = true;
        }
        JSONObject data = new JSONObject();
        boolean isNative = false;
        String pid = null;
        data.put("native", isNative);
        boolean specialConvert = false;
        int pidType = PidUser.TYPE_FANLI_ANDROID;
        if (acceptData.getPlatform().equalsIgnoreCase("ios"))
            pidType = PidUser.TYPE_FANLI_IOS;
        try {
            TaoBaoLink taoBaoLink = null;
        if (TaoBaoUtil.isSpecialGoods(goods.getMaterialLibType())) {
            specialConvert = true;
        } else
            specialConvert = false;
            // 是返利商品库的商品
            if (specialConvert) {
                if (!StringUtil.isNullOrEmpty(specialId)) {
                    if (source != null && "taolijin_free_buy".equals(source)) {
                        taoBaoLink = taoBaoLinkManager.getTaoLiJinLinkForBuy(uid, auctionId, null);
                    }
        String specialId = null;
        String relationId = null;
        // 查询用户ID是否绑定了会员运营ID
        UserExtraTaoBaoInfo userInfo = userExtraTaoBaoInfoService.getByUid(uid);
        if (userInfo != null && !StringUtil.isNullOrEmpty(userInfo.getSpecialId()) && userInfo.getSpecialValid() != null
                && userInfo.getSpecialValid() == true) {
            specialId = userInfo.getSpecialId();
            relationId = userInfo.getRelationId();
            // 已经绑定
            if (specialConvert) {
                isNative = true;
            } else
                isNative = false;
                    if (taoBaoLink == null) {
                        taoBaoLink = taoBaoLinkManager.getTaoBaoLinkForBuy(uid,  auctionId,specialId,null);
                        if(taoBaoLink!=null)
                            clientTBPid=null;
                    }
            pid = TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT;
                    data.put("native", true);
                } else {
                    if (!specialConvert && !isNative) {
                        if (pidType == PidUser.TYPE_FANLI_ANDROID)
                            taoBaoLink = shareGoodsService.getTaoBaoLink(uid, auctionId,
                                    tbPidService.getAndroidDefault().getPid());
                        else
                            taoBaoLink = shareGoodsService.getTaoBaoLink(uid, auctionId,
                                    tbPidService.getIOSDefault().getPid());
                    } else
                        taoBaoLink = taoBaoLinkManager.getTaoBaoLinkForBuy(uid, auctionId, specialId,null);
                    LogHelper.test("购买转链:默认PID转链-" + uid + ":" + auctionId);
                }
            } else {// 不是返利库的商品,用特殊PID替代
                try {
                    relationId = taoBaoBuyRelationMapService.getRelationId(uid);
                } catch (Exception e) {
                    LogHelper.errorDetailInfo(e, "uid:" + uid, null);
                }
                if (!StringUtil.isNullOrEmpty(relationId)) {//
                    if (source != null && "taolijin_free_buy".equals(source)) {
                        taoBaoLink = taoBaoLinkManager.getTaoLiJinLinkForBuy(uid, auctionId,
                                TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID);
                    } else {
                        taoBaoLink = taoBaoLinkManager.getTaoBaoLinkForShare(uid, auctionId, relationId,
                                TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID);
                    }
        } else {// 尚未绑定
            isNative = true;
        }
                    data.put("native", true);
                } else {
                    if (pidType == PidUser.TYPE_FANLI_ANDROID)
                        taoBaoLink = shareGoodsService.getTaoBaoLink(uid, auctionId,
                                tbPidService.getAndroidDefault().getPid());
                    else
                        taoBaoLink = shareGoodsService.getTaoBaoLink(uid, auctionId,
                                tbPidService.getIOSDefault().getPid());
        data.put("native", isNative);
                    LogHelper.test("购买转链:默认PID转链-非返利库商品-" + uid + ":" + auctionId);
                }
            }
            JSONObject link = new JSONObject();
            link.put("clickUrl", taoBaoLink.getClickUrl());
            link.put("couponUrl", taoBaoLink.getCouponLink());
            data.put("type", 1);
            data.put("link", link);
            if (clientTBPid != null)
                data.put("tbPidInfo", clientTBPid);
            out.print(JsonUtil.loadTrueResult(data));
        int pidType = PidUser.TYPE_FANLI_ANDROID;
        if (acceptData.getPlatform().equalsIgnoreCase("ios"))
            pidType = PidUser.TYPE_FANLI_IOS;
        try {
            TaoBaoLink taoBaoLink = null;
            TaoKeLogHelper.convertLinkInfo(
                    String.format("uid:%s  auctionId:%s 输出结果:", uid, auctionId + "") + data.toString());
            // 是返利商品库的商品
            if (specialConvert) {
                if (!StringUtil.isNullOrEmpty(specialId)) {
                    if (source != null && "taolijin_free_buy".equals(source)) {
                        taoBaoLink = taoBaoLinkManager.getTaoLiJinLinkForBuy(uid, auctionId, null);
                    }
            // 获得金币
            integralGetService.addCouponRebate(uid);
                    if (taoBaoLink == null) {
                        taoBaoLink = taoBaoLinkManager.getTaoBaoLinkForBuy(uid, auctionId, specialId, null);
                        if (taoBaoLink != null)
                            clientTBPid = null;
                    }
        } catch (ShareGoodsException e) {
            if (e.getCode() == 1001 || e.getCode() == 1002) {
                out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
            } else {
                out.print(JsonUtil.loadFalseResult(1, e.getMsg()));
            }
        } catch (Exception e) {
                    data.put("native", true);
                } else {
                    if (!specialConvert && !isNative) {
                        if (pidType == PidUser.TYPE_FANLI_ANDROID)
                            taoBaoLink = shareGoodsService.getTaoBaoLink(uid, auctionId,
                                    tbPidService.getAndroidDefault().getPid());
                        else
                            taoBaoLink = shareGoodsService.getTaoBaoLink(uid, auctionId,
                                    tbPidService.getIOSDefault().getPid());
                    } else
                        taoBaoLink = taoBaoLinkManager.getTaoBaoLinkForBuy(uid, auctionId, specialId, null);
                    LogHelper.test("购买转链:默认PID转链-" + uid + ":" + auctionId);
                }
            } else {// 不是返利库的商品,用特殊PID替代
                try {
                    relationId = taoBaoBuyRelationMapService.getRelationId(uid);
                } catch (Exception e) {
                    LogHelper.errorDetailInfo(e, "uid:" + uid, null);
                }
                if (!StringUtil.isNullOrEmpty(relationId)) {//
                    if (source != null && "taolijin_free_buy".equals(source)) {
                        taoBaoLink = taoBaoLinkManager.getTaoLiJinLinkForBuy(uid, auctionId,
                                TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID);
                    } else {
                        taoBaoLink = taoBaoLinkManager.getTaoBaoLinkForShare(uid, auctionId, relationId,
                                TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID);
                    }
            LogHelper.errorDetailInfo(e);
                    data.put("native", true);
                } else {
                    if (pidType == PidUser.TYPE_FANLI_ANDROID)
                        taoBaoLink = shareGoodsService.getTaoBaoLink(uid, auctionId,
                                tbPidService.getAndroidDefault().getPid());
                    else
                        taoBaoLink = shareGoodsService.getTaoBaoLink(uid, auctionId,
                                tbPidService.getIOSDefault().getPid());
            isNative = false;
            try {
                monitorService.addClientAPIMonitor(MonitorFactory.createClientAPI(request, 0, 0, "购买淘宝商品转链出错"));
            } catch (Exception e1) {
                e1.printStackTrace();
            }
                    LogHelper.test("购买转链:默认PID转链-非返利库商品-" + uid + ":" + auctionId);
                }
            }
            JSONObject link = new JSONObject();
            link.put("clickUrl", taoBaoLink.getClickUrl());
            link.put("couponUrl", taoBaoLink.getCouponLink());
            data.put("type", 1);
            data.put("link", link);
            if (clientTBPid != null)
                data.put("tbPidInfo", clientTBPid);
            out.print(JsonUtil.loadTrueResult(data));
            TBPid tbPid = null;
            if (acceptData.getPlatform().equalsIgnoreCase("android")) {
                tbPid = tbPidService.getTBPid(uid, PidUser.TYPE_FANLI_ANDROID);
            } else {
                tbPid = tbPidService.getTBPid(uid, PidUser.TYPE_FANLI_IOS);
            }
            TaoKeLogHelper.convertLinkInfo(
                    String.format("uid:%s  auctionId:%s 输出结果:", uid, auctionId + "") + data.toString());
            LogHelper.test("购买转链:默认PID转链-异常商品-" + uid + ":" + auctionId);
            // 获得金币
            integralGetService.addCouponRebate(uid);
            data.put("native", isNative);
        } catch (ShareGoodsException e) {
            if (e.getCode() == 1001 || e.getCode() == 1002) {
                out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
            } else {
                out.print(JsonUtil.loadFalseResult(1, e.getMsg()));
            }
        } catch (Exception e) {
            if (tbPid != null) {
            LogHelper.errorDetailInfo(e);
                try {
                    TaoBaoLink taoBaoLink = null;
                    if (pidType == PidUser.TYPE_FANLI_ANDROID)
                        taoBaoLink = shareGoodsService.getTaoBaoLink(uid, auctionId,
                                tbPidService.getAndroidDefault().getPid());
                    else
                        taoBaoLink = shareGoodsService.getTaoBaoLink(uid, auctionId,
                                tbPidService.getIOSDefault().getPid());
            isNative = false;
            try {
                monitorService.addClientAPIMonitor(MonitorFactory.createClientAPI(request, 0, 0, "购买淘宝商品转链出错"));
            } catch (Exception e1) {
                e1.printStackTrace();
            }
                    JSONObject link = new JSONObject();
                    link.put("clickUrl", taoBaoLink.getClickUrl());
                    link.put("couponUrl", taoBaoLink.getCouponLink());
                    data.put("type", 1);
                    data.put("link", link);
                    data.put("native", true);
                } catch (Exception e1) {
                    String siteId = tbPid.getPid().split("_")[2];
                    String adzoneId = tbPid.getPid().split("_")[3];
                    TaoBaoUnionConfig config = taoBaoUnionConfigService.getConfigByAppIdCache(siteId);
                    ClientTBPid clientTBPid1 = new ClientTBPid(config.getAppKey(), tbPid.getPid(), siteId, adzoneId);
                    data.put("type", 2);
                    data.put("tbPidInfo", clientTBPid1);
                    data.put("native", true);
                }
            TBPid tbPid = null;
            if (acceptData.getPlatform().equalsIgnoreCase("android")) {
                tbPid = tbPidService.getTBPid(uid, PidUser.TYPE_FANLI_ANDROID);
            } else {
                tbPid = tbPidService.getTBPid(uid, PidUser.TYPE_FANLI_IOS);
            }
                out.print(JsonUtil.loadTrueResult(data));
            } else {
                out.print(JsonUtil.loadFalseResult(1, "请求失败"));
            }
            LogHelper.test("购买转链:默认PID转链-异常商品-" + uid + ":" + auctionId);
            businessEmergent110Service.buyTaoBaoGoodsError(StringUtil.Md5(auctionId + ""),acceptData.getSystem());
        }
    }
            data.put("native", isNative);
    /**
     * 是否在参与推广
     */
            if (tbPid != null) {
    /**
     * 是否在参与推广
     *
     * @param goodsId
     *            -商品ID
     * @param goodsType
     *            -TB/JD
     * @param out
     */
    @RequestMapping(value = "isGoodsExtend")
    public void isGoodsExtend(AcceptData acceptData, String goodsId, String goodsType, PrintWriter out) {
        if (StringUtil.isNullOrEmpty(goodsId)) {
            out.print(JsonUtil.loadFalseResult(1, "未参与推广"));
            return;
        }
        if (StringUtil.isNullOrEmpty(goodsType)) {
            out.print(JsonUtil.loadFalseResult(2, "缺少goodsType"));
            return;
        }
        if ("TB".equalsIgnoreCase(goodsType)) {
            TaoBaoGoodsBrief goods = null;
            try {
                goods = TaoKeApiUtil.getSimpleGoodsInfo(Long.parseLong(goodsId));
            } catch (NumberFormatException e) {
                e.printStackTrace();
            } catch (TaobaoGoodsDownException e) {
                e.printStackTrace();
            }
                try {
                    TaoBaoLink taoBaoLink = null;
                    if (pidType == PidUser.TYPE_FANLI_ANDROID)
                        taoBaoLink = shareGoodsService.getTaoBaoLink(uid, auctionId,
                                tbPidService.getAndroidDefault().getPid());
                    else
                        taoBaoLink = shareGoodsService.getTaoBaoLink(uid, auctionId,
                                tbPidService.getIOSDefault().getPid());
            JSONObject data = new JSONObject();
                    JSONObject link = new JSONObject();
                    link.put("clickUrl", taoBaoLink.getClickUrl());
                    link.put("couponUrl", taoBaoLink.getCouponLink());
                    data.put("type", 1);
                    data.put("link", link);
                    data.put("native", true);
                } catch (Exception e1) {
                    String siteId = tbPid.getPid().split("_")[2];
                    String adzoneId = tbPid.getPid().split("_")[3];
                    TaoBaoUnionConfig config = taoBaoUnionConfigService.getConfigByAppIdCache(siteId);
                    ClientTBPid clientTBPid1 = new ClientTBPid(config.getAppKey(), tbPid.getPid(), siteId, adzoneId);
                    data.put("type", 2);
                    data.put("tbPidInfo", clientTBPid1);
                    data.put("native", true);
                }
            if (goods == null) {
                data.put("extend", false);
                data.put("url", "https://h5.m.taobao.com/awp/core/detail.htm?id=" + goodsId);
            } else {
                data.put("extend", true);
            }
            out.print(JsonUtil.loadTrueResult(data));
        } else {
            out.print(JsonUtil.loadFalseResult(3, "暂不支持其他商品类型"));
        }
    }
                out.print(JsonUtil.loadTrueResult(data));
            } else {
                out.print(JsonUtil.loadFalseResult(1, "请求失败"));
            }
    /**
     * 删除推荐商品
     *
     * @param acceptData
     * @param goodsId
     * @param source
     * @param uid
     * @param reason
     * @param out
     */
    @RequestMapping(value = "deleteRecommendGoods")
    public void deleteRecommendGoods(AcceptData acceptData, Long goodsId, Integer source, Long uid, String reason,
            PrintWriter out) {
        if (goodsId == null) {
            out.print(JsonUtil.loadFalseResult(1, "请上传商品"));
            return;
        }
            businessEmergent110Service.buyTaoBaoGoodsError(StringUtil.Md5(auctionId + ""), acceptData.getSystem());
        }
    }
        RecommendGoodsDeleteHistory history = new RecommendGoodsDeleteHistory();
        history.setDevice(acceptData.getDevice());
        history.setReason(reason);
        history.setUid(uid);
        history.setGoodsSource(source == null ? Constant.SOURCE_TYPE_TAOBAO : source);
        history.setGoodsId(goodsId);
        recommendGoodsDeleteHistoryService.addRecommendGoodsDeleteHistory(history);
        out.print(JsonUtil.loadTrueResult(""));
    /**
     * 是否在参与推广
     */
        // 获得金币
        integralGetService.addCloseRecommendGoods(uid);
    }
    /**
     * 是否在参与推广
     *
     * @param goodsId   -商品ID
     * @param goodsType -TB/JD
     * @param out
     */
    @RequestMapping(value = "isGoodsExtend")
    public void isGoodsExtend(AcceptData acceptData, String goodsId, String goodsType, PrintWriter out) {
        if (StringUtil.isNullOrEmpty(goodsId)) {
            out.print(JsonUtil.loadFalseResult(1, "未参与推广"));
            return;
        }
        if (StringUtil.isNullOrEmpty(goodsType)) {
            out.print(JsonUtil.loadFalseResult(2, "缺少goodsType"));
            return;
        }
        if ("TB".equalsIgnoreCase(goodsType)) {
            TaoBaoGoodsBrief goods = null;
            try {
                goods = TaoKeApiUtil.getSimpleGoodsInfo(Long.parseLong(goodsId));
            } catch (NumberFormatException e) {
                e.printStackTrace();
            } catch (TaobaoGoodsDownException e) {
                e.printStackTrace();
            }
            JSONObject data = new JSONObject();
            if (goods == null) {
                data.put("extend", false);
                data.put("url", "https://h5.m.taobao.com/awp/core/detail.htm?id=" + goodsId);
            } else {
                data.put("extend", true);
            }
            out.print(JsonUtil.loadTrueResult(data));
        } else {
            out.print(JsonUtil.loadFalseResult(3, "暂不支持其他商品类型"));
        }
    }
    /**
     * 删除推荐商品
     *
     * @param acceptData
     * @param goodsId
     * @param source
     * @param uid
     * @param reason
     * @param out
     */
    @RequestMapping(value = "deleteRecommendGoods")
    public void deleteRecommendGoods(AcceptData acceptData, Long goodsId, Integer source, Long uid, String reason,
                                     PrintWriter out) {
        if (goodsId == null) {
            out.print(JsonUtil.loadFalseResult(1, "请上传商品"));
            return;
        }
        RecommendGoodsDeleteHistory history = new RecommendGoodsDeleteHistory();
        history.setDevice(acceptData.getDevice());
        history.setReason(reason);
        history.setUid(uid);
        history.setGoodsSource(source == null ? Constant.SOURCE_TYPE_TAOBAO : source);
        history.setGoodsId(goodsId);
        recommendGoodsDeleteHistoryService.addRecommendGoodsDeleteHistory(history);
        out.print(JsonUtil.loadTrueResult(""));
        // 获得金币
        integralGetService.addCloseRecommendGoods(uid);
    }
}
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java
@@ -10,7 +10,9 @@
import javax.annotation.Resource;
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.entity.SystemFunction;
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.util.*;
import org.json.simple.JSONArray;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -86,14 +88,8 @@
import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
import com.yeshi.fanli.service.inter.user.vip.UserVipConfigService;
import com.yeshi.fanli.service.manger.user.UserLevelManager;
import com.yeshi.fanli.util.Constant;
import org.yeshi.utils.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.RedisManager;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TaoBaoConstant;
import com.yeshi.fanli.util.ThreadUtil;
import org.yeshi.utils.TimeUtil;
import com.yeshi.fanli.util.VersionUtil;
import com.yeshi.fanli.util.cache.JDGoodsCacheUtil;
import com.yeshi.fanli.util.cache.PinDuoDuoCacheUtil;
import com.yeshi.fanli.util.cache.TaoBaoGoodsCacheUtil;
@@ -357,7 +353,7 @@
            try {
                goods = TaoKeApiUtil.searchGoodsDetail(id, app);
                if (goods.getTkRate() == null || new BigDecimal(0).compareTo(goods.getTkRate()) == 0) {
                    TaoBaoGoodsBrief linkInfo = TaoKeApiUtil.specialConvertCoupon(goods.getAuctionId(), app,null,null);
                    TaoBaoGoodsBrief linkInfo = TaoKeApiUtil.specialConvertCoupon(goods.getAuctionId(), app, null, null);
                    if (linkInfo != null) {
                        goods.setAuctionUrl(linkInfo.getAuctionUrl());
                        goods.setCouponLink(linkInfo.getCouponLink());
@@ -1602,6 +1598,49 @@
        }
    }
    /**
     * 获取京东领券链接(不返利)
     *
     * @param acceptData
     * @param id
     * @param couponUrl
     * @param source
     * @param out
     */
    private void getJDLinkWithoutFanLi(AcceptData acceptData, Long id, String couponUrl, String source, PrintWriter out) {
        JDGoods goods = jdGoodsCacheUtil.getGoodsInfo(id);
        if (goods == null) {
            out.print(JsonUtil.loadFalseResult(2, "商品已下架"));
            return;
        }
        String jumpLink = null;
        String materialId = "https://item.jd.com/" + id + ".html";
        if (StringUtil.isNullOrEmpty(couponUrl)) {
            JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(goods.getCouponInfoList(), goods.getPrice());
            if (couponInfo != null) {
                couponUrl = couponInfo.getLink();
            }
            jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_COUPON + "",
                    "");
            if (jumpLink == null) {
                jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, null, JDApiUtil.POSITION_COUPON + "",
                        "");
            }
        } else {
            jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_COUPON + "",
                    "");
            if (StringUtil.isNullOrEmpty(jumpLink)) {
                jumpLink = couponUrl;
            }
        }
        JSONObject data = new JSONObject();
        data.put("native", true);
        data.put("jumpLink", jumpLink);
        out.print(JsonUtil.loadTrueResult(data));
    }
    /**
     * 京东购买链接
     *
@@ -1614,15 +1653,23 @@
     */
    @RequestMapping(value = "getJDLink")
    public void getJDLink(AcceptData acceptData, Long uid, Long id, String couponUrl, String source, PrintWriter out) {
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
            return;
        }
        if (id == null || id <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "商品ID不能为空"));
            return;
        }
        if (!SystemInfoUtil.hasFunctions(acceptData.getSystem(), SystemFunction.fanli)) {
            getJDLinkWithoutFanLi(acceptData, id, couponUrl, source, out);
            return;
        }
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
            return;
        }
        UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
        if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
@@ -1702,21 +1749,32 @@
     */
    @RequestMapping(value = "getPDDLink")
    public void getPDDLink(AcceptData acceptData, Long uid, Long id, String source, PrintWriter out) {
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
            return;
        }
        if (id == null || id <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "商品ID不能为空"));
            return;
        }
        UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
        if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
            out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
            return;
        String pid = PinDuoDuoApiUtil.PID_FANLI;
        //只是领券
        if (!SystemInfoUtil.hasFunctions(acceptData.getSystem(), SystemFunction.fanli)) {
            pid = PinDuoDuoApiUtil.PID_COUPON;
            uid = null;
        } else {
            if (uid == null || uid <= 0) {
                out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
                return;
            }
            UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
            if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
                out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
                return;
            }
        }
        PDDGoodsDetail goods = pinDuoDuoCacheUtil.getGoodsInfo(id);
        if (goods == null) {
@@ -1724,10 +1782,9 @@
            return;
        }
        PDDPromotionUrl convertUrl = PinDuoDuoApiUtil.convert(id, PinDuoDuoApiUtil.PID_FANLI + "", uid + "");
        PDDPromotionUrl convertUrl = PinDuoDuoApiUtil.convert(id, pid + "", uid + "");
        JSONObject data = new JSONObject();
        data.put("native", true);
        data.put("jumpLink", convertUrl.getUrl());
        data.put("nativeJumpLink", PinDuoDuoUtil.getAndroidNativeURI(convertUrl.getUrl()));
        out.print(JsonUtil.loadTrueResult(data));
@@ -1747,20 +1804,28 @@
     */
    @RequestMapping(value = "getVIPLink")
    public void getVIPLink(AcceptData acceptData, Long uid, Long id, String source, PrintWriter out) {
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
            return;
        }
        if (id == null || id <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "商品ID不能为空"));
            return;
        }
        UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
        if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
            out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
            return;
        String tag = null;
        //只是领券
        if (!SystemInfoUtil.hasFunctions(acceptData.getSystem(), SystemFunction.fanli)) {
            tag = VipShopUtil.getCouponChanTag();
        } else {
            if (uid == null || uid <= 0) {
                out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
                return;
            }
            UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
            if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
                out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
                return;
            }
            tag = VipShopUtil.getBuyChanTag(uid);
        }
        VIPGoodsInfo goods = VipShopApiUtil.getGoodsDetail(id + "");
@@ -1769,7 +1834,7 @@
            return;
        }
        VIPConvertResultDTO convertUrl = VipShopApiUtil.convertLink(id + "", VipShopUtil.getBuyChanTag(uid));
        VIPConvertResultDTO convertUrl = VipShopApiUtil.convertLink(id + "", tag);
        JSONObject data = new JSONObject();
        data.put("native", true);
        data.put("jumpLink", convertUrl.getUrl());
@@ -1782,21 +1847,27 @@
    @RequestMapping(value = "getSuningLink")
    public void getSuningLink(AcceptData acceptData, Long uid, String id, String source, PrintWriter out) {
        if (uid == null || uid <= 0) {
            out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
            return;
        }
        if (StringUtil.isNullOrEmpty(id)) {
            out.print(JsonUtil.loadFalseResult(1, "商品ID不能为空"));
            return;
        }
        UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
        if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
            out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
            return;
        String pid = SuningApiUtil.PID_BUY;
        if (!SystemInfoUtil.hasFunctions(acceptData.getSystem(), SystemFunction.fanli)) {
            pid=SuningApiUtil.PID_COUPON;
            uid=null;
        } else {
            if (uid == null || uid <= 0) {
                out.print(JsonUtil.loadFalseResult(1, "用户ID不能为空"));
                return;
            }
            UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
            if (user != null && user.getState() != UserInfo.STATE_NORMAL) {
                out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
                return;
            }
        }
        String[] sts = SuningUtil.getGoodsIdDetail(id);
        String supplierCode = sts[0];
@@ -1812,7 +1883,7 @@
        if (!StringUtil.isNullOrEmpty(goods.getCouponInfo().getCouponUrl()))
            quanUrl = goods.getCouponInfo().getCouponUrl();
        String link = SuningApiUtil.convertLink(SuningUtil.getProductUrl(supplierCode, goodsCode), quanUrl,
                SuningApiUtil.PID_BUY, uid + "");
                pid, uid + "");
        JSONObject data = new JSONObject();
        data.put("native", false);
        data.put("jumpLink", link);
fanli/src/main/java/com/yeshi/fanli/entity/SystemEnum.java
@@ -8,9 +8,10 @@
 */
public enum SystemEnum {
    blks("com.yeshi.ec.rebate", "com.xyj.ec.fanli-ios", new String[]{}, new SystemFunction[]{
            SystemFunction.bindPhone, SystemFunction.threeSale, SystemFunction.cloudOrder, SystemFunction.godenCorn, SystemFunction.redPack,SystemFunction.faQuan
            SystemFunction.bindPhone, SystemFunction.threeSale, SystemFunction.cloudOrder, SystemFunction.godenCorn, SystemFunction.redPack,SystemFunction.faQuan,SystemFunction.fanli
    }, 1, "板栗快省"),
    flq("com.fanliunion.android", "com.xyj.ec.flq-ios", new String[]{}, new SystemFunction[]{SystemFunction.faQuan}, 2, "返利联盟");
    flq("com.fanliunion.android", "com.xyj.ec.flq-ios", new String[]{}, new SystemFunction[]{SystemFunction.faQuan,SystemFunction.fanli}, 11, "返利联盟"),
    yhqjx("com.youhuiquanjx.android","com.youhuiquanjx.ios",new String[]{}, new SystemFunction[]{SystemFunction.faQuan}, 12, "优惠券精选");
    private String packageName;
    private String bundleId;
    private int systemId;
fanli/src/main/java/com/yeshi/fanli/entity/SystemFunction.java
@@ -10,7 +10,9 @@
    cloudOrder("云发单"),
    redPack("红包"),
    faQuan("发圈"),
    vip("超级会员");
    vip("超级会员"),
    fanli("是否需要返利")
    ;
    private SystemFunction(String desc) {
fanli/src/main/java/com/yeshi/fanli/job/DynamicInfoJob.java
@@ -51,7 +51,7 @@
import com.yeshi.fanli.util.factory.goods.TaoBaoGoodsFactory;
import com.yeshi.fanli.util.jd.JDApiUtil;
import com.yeshi.fanli.util.jd.JDUtil;
import com.yeshi.fanli.util.taobao.HaoDanKuApiUtil;
import com.yeshi.goods.facade.utils.taobao.HaoDanKuApiUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
@Component
fanli/src/main/java/com/yeshi/fanli/job/goods/FreeGoodsCouponJob.java
@@ -35,7 +35,7 @@
import com.yeshi.fanli.util.factory.goods.TaoBaoGoodsFactory;
import com.yeshi.fanli.util.jd.JDApiUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
import com.yeshi.fanli.util.taobao.HaoDanKuApiUtil;
import com.yeshi.goods.facade.utils.taobao.HaoDanKuApiUtil;
import com.yeshi.fanli.vo.goods.GoodsDetailVO;
@Component
fanli/src/main/java/com/yeshi/fanli/job/goods/HDKGoodsJob.java
@@ -14,7 +14,7 @@
import com.yeshi.goods.facade.entity.taobao.haodanku.HDKGoodsDetail;
import com.yeshi.fanli.service.inter.goods.PullNewGoodsService;
import com.yeshi.goods.facade.service.HDKGoodsDetailService;
import com.yeshi.fanli.util.taobao.HaoDanKuApiUtil;
import com.yeshi.goods.facade.utils.taobao.HaoDanKuApiUtil;
@Component
public class HDKGoodsJob {
fanli/src/main/java/com/yeshi/fanli/job/goods/PullNewJob.java
@@ -20,7 +20,7 @@
import com.yeshi.fanli.service.inter.goods.PullNewGoodsService;
import com.yeshi.fanli.service.inter.redpack.RedPackConfigService;
import com.yeshi.fanli.service.inter.user.UserRankingsService;
import com.yeshi.fanli.util.taobao.HaoDanKuApiUtil;
import com.yeshi.goods.facade.utils.taobao.HaoDanKuApiUtil;
@Component
public class PullNewJob {
fanli/src/main/java/com/yeshi/fanli/service/manger/goods/ConvertLinkManager.java
@@ -29,7 +29,7 @@
import com.yeshi.fanli.util.jd.JDUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoUtil;
import com.yeshi.fanli.util.taobao.HaoDanKuApiUtil;
import com.yeshi.goods.facade.utils.taobao.HaoDanKuApiUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
fanli/src/main/java/com/yeshi/fanli/service/manger/goods/TaoBaoLinkManager.java
@@ -58,19 +58,15 @@
    @Resource
    private TaoBaoCouponCacheService taoBaoCouponCacheService;
    /**
     * 获取淘宝购买链接
     *
     * @param uid
     * 只领券
     * @param auctionId
     * @param specialId
     * @param pid
     * @return
     */
    public TaoBaoLink getTaoBaoLinkForBuy(Long uid, Long auctionId, String specialId, String pid) throws TaoBaoConvertLinkException {
        if (uid == null || uid <= 0) {
            throw new TaoBaoConvertLinkException(1, "用户ID不能为空");
        }
    public TaoBaoLink getTaoBaoLinkForRecieveCoupon(Long auctionId, String specialId, String pid) throws TaoBaoConvertLinkException{
        if (auctionId == null || auctionId <= 0) {
            throw new TaoBaoConvertLinkException(2, "商品ID不能为空");
        }
@@ -128,6 +124,21 @@
        return taoBaoLink;
    }
    /**
     * 获取淘宝购买链接
     *
     * @param uid
     * @param auctionId
     * @param pid
     * @return
     */
    public TaoBaoLink getTaoBaoLinkForBuy(Long uid, Long auctionId, String specialId, String pid) throws TaoBaoConvertLinkException {
        if (uid == null || uid <= 0) {
            throw new TaoBaoConvertLinkException(1, "用户ID不能为空");
        }
        return getTaoBaoLinkForRecieveCoupon(auctionId,specialId,pid);
    }
    /**
     * 记录淘宝转链的券信息
fanli/src/main/java/com/yeshi/fanli/util/TaoBaoConstant.java
@@ -28,6 +28,9 @@
    
    //口碑PID
    public static final String TAOBAO_KOUBEI_PID = "mm_124933865_56750082_19511700026";
    //单纯领券PID
    public static final String TAOBAO_COUPON_PID = "mm_124933865_56750082_19509400077";
    
    
    // 淘礼金会员
fanli/src/main/java/com/yeshi/fanli/util/suning/SuningApiUtil.java
@@ -34,6 +34,7 @@
    public final static String PID_SHARE = "666527";
    public final static String PID_BUY = "666526";
    public final static String PID_COUPON = "666528";
    private static String post(String url, String entity, Map<String, String> headers) {
        String charset = "utf-8";
fanli/src/main/java/com/yeshi/fanli/util/vipshop/VipShopUtil.java
@@ -48,6 +48,11 @@
    }
    public static String getCouponChanTag() {
        return getBase64Str("coupon");
    }
    public static String getUidFromChanTag(String tag) {
        String decodeTag = StringUtil.getFromBase64(tag);
        return decodeTag.split("#")[1];
pom.xml
@@ -552,6 +552,5 @@
        <module>fanli</module>
        <module>facade-goods</module>
        <module>facede-common</module>
        <module>service-goods</module>
    </modules>
</project>
service-goods/.gitignore
File was deleted
service-goods/.idea/workspace.xml
New file
@@ -0,0 +1,828 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ChangeListManager">
    <list default="true" id="d8c7d01e-e41b-49c4-a713-aa47cb9aad37" name="Default Changelist" comment="">
      <change beforePath="$PROJECT_DIR$/../.idea/artifacts/service_goods_war_exploded.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../.idea/artifacts/service_goods_war_exploded.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/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__com_carrotsearch_hppc_0_7_1.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_10_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_10_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_10_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__com_fasterxml_jackson_dataformat_jackson_dataformat_cbor_2_10_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__com_fasterxml_jackson_dataformat_jackson_dataformat_smile_2_10_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__com_fasterxml_jackson_dataformat_jackson_dataformat_yaml_2_10_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_10_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_10_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_10_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__com_github_spullara_mustache_java_compiler_0_9_3.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__com_google_code_gson_gson_2_8_6.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_15.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__commons_codec_commons_codec_1_13.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__commons_pool_commons_pool_1_6.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__io_netty_netty_all_4_1_45_Final.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__io_netty_netty_tcnative_boringssl_static_2_0_28_Final.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_1.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__javax_activation_javax_activation_api_1_2_0.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__javax_xml_bind_jaxb_api_2_3_1.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__joda_time_joda_time_2_10_5.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__junit_junit_4_12.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__mysql_mysql_connector_java_8_0_19.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_10_6.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_10_6.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__net_minidev_json_smart_2_3.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_commons_commons_dbcp2_2_7_0.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_commons_commons_lang3_3_9.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_commons_commons_pool2_2_7_0.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_10.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_13.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_httpcomponents_httpcore_nio_4_4_13.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_httpcomponents_httpmime_4_5_10.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_12_1.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_12_1.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_12_1.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_lucene_lucene_analyzers_common_7_7_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_lucene_lucene_backward_codecs_7_7_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_lucene_lucene_core_7_7_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_lucene_lucene_grouping_7_7_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_lucene_lucene_highlighter_7_7_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_lucene_lucene_join_7_7_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_lucene_lucene_memory_7_7_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_lucene_lucene_misc_7_7_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_lucene_lucene_queries_7_7_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_lucene_lucene_queryparser_7_7_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_lucene_lucene_sandbox_7_7_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_lucene_lucene_spatial3d_7_7_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_lucene_lucene_spatial_7_7_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_lucene_lucene_spatial_extras_7_7_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_lucene_lucene_suggest_7_7_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_30.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_30.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_30.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_aspectj_aspectjrt_1_9_5.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_aspectj_aspectjweaver_1_9_5.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_assertj_assertj_core_3_13_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_codehaus_groovy_groovy_2_5_9.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_elasticsearch_client_elasticsearch_rest_client_6_8_6.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_elasticsearch_client_elasticsearch_rest_high_level_client_6_8_6.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_elasticsearch_elasticsearch_6_8_6.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_elasticsearch_elasticsearch_cli_6_8_6.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_elasticsearch_elasticsearch_core_6_8_6.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_elasticsearch_elasticsearch_secure_sm_6_8_6.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_elasticsearch_elasticsearch_x_content_6_8_6.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_elasticsearch_plugin_aggs_matrix_stats_client_6_8_6.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_elasticsearch_plugin_lang_mustache_client_6_8_6.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_elasticsearch_plugin_parent_join_client_6_8_6.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_elasticsearch_plugin_rank_eval_client_6_8_6.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_freemarker_freemarker_2_3_29.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_hamcrest_hamcrest_2_1.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_hamcrest_hamcrest_core_2_1.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_18_Final.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_javassist_javassist_3_18_1_GA.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_1_Final.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_5_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_5_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_5_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_5_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_5_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_5_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_mockito_mockito_core_3_1_0.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_3_1_0.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_mongodb_bson_3_11_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_mongodb_mongo_java_driver_3_12_0.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_mongodb_mongodb_driver_3_11_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_mongodb_mongodb_driver_core_3_11_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_quartz_scheduler_quartz_2_3_2.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_30.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_30.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_30.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_boot_spring_boot_2_2_4_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_2_4_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_2_4_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_data_mongodb_2_2_4_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_2_4_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_2_4_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_2_4_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_2_4_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_validation_2_2_4_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_2_4_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_2_4_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_2_4_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_data_spring_data_commons_2_2_4_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_data_spring_data_keyvalue_2_2_4_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_data_spring_data_mongodb_2_2_4_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_data_spring_data_redis_2_2_4_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_spring_aop_5_2_3_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_spring_aspects_5_2_3_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_spring_beans_5_2_3_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_spring_context_5_2_3_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_spring_context_support_5_2_3_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_spring_core_5_2_3_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_spring_expression_5_2_3_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_spring_jcl_5_2_3_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_spring_jdbc_5_2_3_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_spring_orm_5_2_3_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_spring_oxm_5_2_3_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_spring_test_5_2_3_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_spring_tx_5_2_3_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_spring_web_5_2_3_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_springframework_spring_webmvc_5_2_3_RELEASE.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_6_3.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/libraries/Maven__org_yaml_snakeyaml_1_25.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../.idea/modules.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../.idea/modules.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/../facade-goods/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../facade-goods/pom.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/controller/client/v1/GoodsController.java" beforeDir="false" afterPath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/controller/client/v1/GoodsController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java" beforeDir="false" afterPath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/entity/SystemEnum.java" beforeDir="false" afterPath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/entity/SystemEnum.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/entity/SystemFunction.java" beforeDir="false" afterPath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/entity/SystemFunction.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/job/DynamicInfoJob.java" beforeDir="false" afterPath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/job/DynamicInfoJob.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/job/goods/FreeGoodsCouponJob.java" beforeDir="false" afterPath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/job/goods/FreeGoodsCouponJob.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/job/goods/HDKGoodsJob.java" beforeDir="false" afterPath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/job/goods/HDKGoodsJob.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/job/goods/PullNewJob.java" beforeDir="false" afterPath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/job/goods/PullNewJob.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/service/manger/goods/ConvertLinkManager.java" beforeDir="false" afterPath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/service/manger/goods/ConvertLinkManager.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/service/manger/goods/TaoBaoLinkManager.java" beforeDir="false" afterPath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/service/manger/goods/TaoBaoLinkManager.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/util/TaoBaoConstant.java" beforeDir="false" afterPath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/util/TaoBaoConstant.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/util/suning/SuningApiUtil.java" beforeDir="false" afterPath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/util/suning/SuningApiUtil.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/util/taobao/HaoDanKuApiUtil.java" beforeDir="false" afterPath="$PROJECT_DIR$/../facade-goods/src/main/java/com/yeshi/goods/facade/utils/taobao/HaoDanKuApiUtil.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/util/vipshop/VipShopUtil.java" beforeDir="false" afterPath="$PROJECT_DIR$/../fanli/src/main/java/com/yeshi/fanli/util/vipshop/VipShopUtil.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/../pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../pom.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/.gitignore" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/.mvn/wrapper/MavenWrapperDownloader.java" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/.mvn/wrapper/maven-wrapper.jar" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/.mvn/wrapper/maven-wrapper.properties" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/mvnw" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/mvnw.cmd" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/src/main/java/com/blks/goods/GoodsApplication.java" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/src/main/java/com/blks/goods/dao/taobao/TaoBaoCouponCacheDao.java" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/src/main/java/com/blks/goods/service/remote/TaoBaoCouponCacheServiceRemote.java" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/src/main/resources/application.yml" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/src/test/java/com/blks/goods/GoodsApplicationTests.java" beforeDir="false" />
      <change beforePath="$PROJECT_DIR$/../utils/src/main/java/org/yeshi/utils/StringUtil.java" beforeDir="false" afterPath="$PROJECT_DIR$/../utils/src/main/java/org/yeshi/utils/StringUtil.java" afterDir="false" />
    </list>
    <ignored path="$PROJECT_DIR$/target/" />
    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
    <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="FUSProjectUsageTrigger">
    <session id="1422008948">
      <usages-collector id="statistics.lifecycle.project">
        <counts>
          <entry key="project.closed" value="1" />
          <entry key="project.open.time.10" value="1" />
          <entry key="project.open.time.2" value="1" />
          <entry key="project.opened" value="2" />
        </counts>
      </usages-collector>
      <usages-collector id="statistics.file.extensions.open">
        <counts>
          <entry key="1-SNAPSHOT" value="1" />
          <entry key="class" value="1" />
          <entry key="java" value="1" />
          <entry key="xml" value="1" />
        </counts>
      </usages-collector>
      <usages-collector id="statistics.file.types.open">
        <counts>
          <entry key="CLASS" value="1" />
          <entry key="JAVA" value="1" />
          <entry key="UML" value="1" />
          <entry key="XML" value="1" />
        </counts>
      </usages-collector>
      <usages-collector id="statistics.file.extensions.edit">
        <counts>
          <entry key="xml" value="1" />
        </counts>
      </usages-collector>
      <usages-collector id="statistics.file.types.edit">
        <counts>
          <entry key="XML" value="1" />
        </counts>
      </usages-collector>
    </session>
  </component>
  <component name="FileEditorManager">
    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
      <file pinned="false" current-in-tab="true">
        <entry file="jar://$MAVEN_REPOSITORY$/com/yeshi/common/0.0.1-SNAPSHOT/common-0.0.1-SNAPSHOT.jar!/com/yeshi/common/MongodbBaseDao.class">
          <provider selected="true" editor-type-id="text-editor">
            <state relative-caret-position="117">
              <caret line="22" column="5" lean-forward="true" selection-start-line="22" selection-start-column="5" selection-end-line="22" selection-end-column="5" />
            </state>
          </provider>
        </entry>
      </file>
    </leaf>
  </component>
  <component name="FindInProjectRecents">
    <findStrings>
      <find>mongo</find>
    </findStrings>
  </component>
  <component name="Git.Settings">
    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
  </component>
  <component name="IdeDocumentHistory">
    <option name="CHANGED_PATHS">
      <list>
        <option value="$PROJECT_DIR$/pom.xml" />
      </list>
    </option>
  </component>
  <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
  <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
  <component name="JsGulpfileManager">
    <detection-done>true</detection-done>
    <sorting>DEFINITION_ORDER</sorting>
  </component>
  <component name="MavenImportPreferences">
    <option name="generalSettings">
      <MavenGeneralSettings>
        <option name="mavenHome" value="D:/maven/apache-maven-3.3.9" />
      </MavenGeneralSettings>
    </option>
    <option name="importingSettings">
      <MavenImportingSettings>
        <option name="importAutomatically" value="true" />
      </MavenImportingSettings>
    </option>
  </component>
  <component name="MavenProjectNavigator">
    <treeState>
      <expand>
        <path>
          <item name="" type="16c1761:MavenProjectsStructure$RootNode" />
          <item name="goods" type="9519ce18:MavenProjectsStructure$ProjectNode" />
        </path>
        <path>
          <item name="" type="16c1761:MavenProjectsStructure$RootNode" />
          <item name="goods" type="9519ce18:MavenProjectsStructure$ProjectNode" />
          <item name="Lifecycle" type="58874e2:MavenProjectsStructure$LifecycleNode" />
        </path>
      </expand>
      <select />
    </treeState>
  </component>
  <component name="MavenRunner">
    <option name="skipTests" value="true" />
  </component>
  <component name="ProjectFrameBounds" extendedState="6">
    <option name="x" value="-8" />
    <option name="y" value="-8" />
    <option name="width" value="1874" />
    <option name="height" value="1096" />
  </component>
  <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
  <component name="ProjectView">
    <navigator proportions="" version="1">
      <foldersAlwaysOnTop value="true" />
    </navigator>
    <panes>
      <pane id="Scope" />
      <pane id="ProjectPane">
        <subPane>
          <expand>
            <path>
              <item name="goods" type="b2602c69:ProjectViewProjectNode" />
              <item name="service-goods" type="462c0819:PsiDirectoryNode" />
            </path>
          </expand>
          <select />
        </subPane>
      </pane>
      <pane id="PackagesPane" />
    </panes>
  </component>
  <component name="PropertiesComponent">
    <property name="RequestMappingsPanelOrder0" value="0" />
    <property name="RequestMappingsPanelOrder1" value="1" />
    <property name="RequestMappingsPanelWidth0" value="75" />
    <property name="RequestMappingsPanelWidth1" value="75" />
    <property name="WebServerToolWindowFactoryState" value="false" />
    <property name="aspect.path.notification.shown" value="true" />
    <property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1595582928136" />
    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
    <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.19521531" />
    <property name="settings.editor.selected.configurable" value="MavenSettings" />
  </component>
  <component name="RunDashboard">
    <option name="ruleStates">
      <list>
        <RuleState>
          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
        </RuleState>
        <RuleState>
          <option name="name" value="StatusDashboardGroupingRule" />
        </RuleState>
      </list>
    </option>
  </component>
  <component name="RunManager" selected="JUnit.GoodsApplicationTests.contextLoads">
    <configuration name="GoodsApplicationTests.contextLoads" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
      <module name="goods" />
      <extension name="coverage">
        <pattern>
          <option name="PATTERN" value="com.blks.goods.*" />
          <option name="ENABLED" value="true" />
        </pattern>
      </extension>
      <option name="PACKAGE_NAME" value="com.blks.goods" />
      <option name="MAIN_CLASS_NAME" value="com.blks.goods.GoodsApplicationTests" />
      <option name="METHOD_NAME" value="contextLoads" />
      <option name="TEST_OBJECT" value="method" />
      <method v="2">
        <option name="Make" enabled="true" />
      </method>
    </configuration>
    <configuration name="GoodsApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
      <module name="goods" />
      <option name="SPRING_BOOT_MAIN_CLASS" value="com.blks.goods.GoodsApplication" />
      <method v="2">
        <option name="Make" enabled="true" />
      </method>
    </configuration>
    <list>
      <item itemvalue="Spring Boot.GoodsApplication" />
      <item itemvalue="JUnit.GoodsApplicationTests.contextLoads" />
    </list>
    <recent_temporary>
      <list>
        <item itemvalue="JUnit.GoodsApplicationTests.contextLoads" />
      </list>
    </recent_temporary>
  </component>
  <component name="SvnConfiguration">
    <configuration />
  </component>
  <component name="TaskManager">
    <task active="true" id="Default" summary="Default task">
      <changelist id="d8c7d01e-e41b-49c4-a713-aa47cb9aad37" name="Default Changelist" comment="" />
      <created>1595581734656</created>
      <option name="number" value="Default" />
      <option name="presentableId" value="Default" />
      <updated>1595581734656</updated>
      <workItem from="1595581737449" duration="1180000" />
      <workItem from="1595583173631" duration="281000" />
    </task>
    <servers />
  </component>
  <component name="TestHistory">
    <history-entry file="GoodsApplicationTests_contextLoads - 2020.07.24 at 17h 18m 19s.xml">
      <configuration name="GoodsApplicationTests.contextLoads" configurationId="JUnit" />
    </history-entry>
  </component>
  <component name="TimeTrackingManager">
    <option name="totallyTimeSpent" value="1461000" />
  </component>
  <component name="TodoView">
    <todo-panel id="selected-file">
      <is-autoscroll-to-source value="true" />
    </todo-panel>
    <todo-panel id="all">
      <are-packages-shown value="true" />
      <is-autoscroll-to-source value="true" />
    </todo-panel>
  </component>
  <component name="ToolWindowManager">
    <frame x="-8" y="-8" width="1874" height="1096" extended-state="6" />
    <editor active="true" />
    <layout>
      <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.26130098" />
      <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
      <window_info id="Designer" order="2" />
      <window_info id="JRebel" order="3" side_tool="true" />
      <window_info id="Image Layers" order="4" />
      <window_info id="UI Designer" order="5" />
      <window_info id="Favorites" order="6" side_tool="true" />
      <window_info id="Capture Tool" order="7" />
      <window_info id="Web" order="8" side_tool="true" />
      <window_info anchor="bottom" id="Message" order="0" />
      <window_info anchor="bottom" id="Find" order="1" />
      <window_info active="true" anchor="bottom" id="Run" order="2" visible="true" weight="0.601921" />
      <window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
      <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
      <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
      <window_info anchor="bottom" id="TODO" order="6" weight="0.32977587" />
      <window_info anchor="bottom" id="Spring" order="7" weight="0.43863395" />
      <window_info anchor="bottom" id="Terminal" order="8" weight="0.32977587" />
      <window_info anchor="bottom" id="Event Log" order="9" side_tool="true" />
      <window_info anchor="bottom" id="Messages" order="10" />
      <window_info anchor="bottom" id="Java Enterprise" order="11" />
      <window_info anchor="bottom" id="Database Changes" order="12" show_stripe_button="false" />
      <window_info anchor="bottom" id="Version Control" order="13" show_stripe_button="false" />
      <window_info anchor="bottom" id="JRebel Executor" order="14" />
      <window_info anchor="bottom" id="JRebel Console" order="15" side_tool="true" />
      <window_info anchor="right" id="JRebel Setup Guide" visible="true" weight="0.3296582" />
      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
      <window_info anchor="right" id="Palette" order="3" />
      <window_info anchor="right" id="Capture Analysis" order="4" />
      <window_info anchor="right" id="Maven Projects" order="5" weight="0.19790518" />
      <window_info anchor="right" id="Database" order="6" />
      <window_info anchor="right" id="Palette&#9;" order="7" />
      <window_info anchor="right" id="Theme Preview" order="8" />
      <window_info anchor="right" id="SciView" order="9" weight="0.3296582" />
      <window_info anchor="right" id="Bean Validation" order="10" />
    </layout>
  </component>
  <component name="TypeScriptGeneratedFilesManager">
    <option name="version" value="1" />
  </component>
  <component name="VcsContentAnnotationSettings">
    <option name="myLimit" value="2678400000" />
  </component>
  <component name="editorHistoryManager">
    <entry file="uml://MAVEN/com.blks:goods:0.0.1-SNAPSHOT">
      <provider selected="true" editor-type-id="UmlEditorProvider">
        <state>
          <ID>MAVEN</ID>
          <OriginalElement>com.blks:goods:0.0.1-SNAPSHOT</OriginalElement>
          <nodes>
            <node x="" y="">com.blks:goods:0.0.1-SNAPSHOT</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.yeshi:common:jar:0.0.1-SNAPSHOT</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.yeshi:utils:jar:0.0.1-SNAPSHOT</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.yeshi:utils:jar:0.0.1-SNAPSHOT/com.opencsv:opencsv:jar:4.3.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.yeshi:utils:jar:0.0.1-SNAPSHOT/com.opencsv:opencsv:jar:4.3.2/org.apache.commons:commons-text:jar:1.3</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.yeshi:utils:jar:0.0.1-SNAPSHOT/com.opencsv:opencsv:jar:4.3.2/commons-beanutils:commons-beanutils:jar:1.9.3</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.yeshi:utils:jar:0.0.1-SNAPSHOT/com.opencsv:opencsv:jar:4.3.2/org.apache.commons:commons-collections4:jar:4.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/net.sf.ehcache:ehcache-core:jar:2.6.11</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/net.sf.ehcache:ehcache-web:jar:2.0.4</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/net.sf.ehcache:ehcache-web:jar:2.0.4/net.sf.ehcache:ehcache-core:jar:2.4.6</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework:spring-context:jar:5.2.3.RELEASE</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework:spring-context:jar:5.2.3.RELEASE/org.springframework:spring-aop:jar:5.2.3.RELEASE</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework:spring-context:jar:5.2.3.RELEASE/org.springframework:spring-beans:jar:5.2.3.RELEASE</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework:spring-context:jar:5.2.3.RELEASE/org.springframework:spring-expression:jar:5.2.3.RELEASE</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework:spring-webmvc:jar:5.2.3.RELEASE</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework:spring-orm:jar:5.2.3.RELEASE</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework:spring-orm:jar:5.2.3.RELEASE/org.springframework:spring-jdbc:jar:5.2.3.RELEASE</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework:spring-orm:jar:5.2.3.RELEASE/org.springframework:spring-tx:jar:5.2.3.RELEASE</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.quartz-scheduler:quartz:jar:2.3.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.quartz-scheduler:quartz:jar:2.3.2/com.mchange:mchange-commons-java:jar:0.2.15</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework:spring-context-support:jar:5.2.3.RELEASE</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/aspectj:aspectjrt:jar:1.5.3</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.aspectj:aspectjweaver:jar:1.9.5</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/cglib:cglib-nodep:jar:3.2.4</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.freemarker:freemarker:jar:2.3.29</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/cglib:cglib:jar:2.2.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/cglib:cglib:jar:2.2.2/asm:asm:jar:3.3.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/mysql:mysql-connector-java:jar:8.0.19</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/jstl:jstl:jar:1.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.apache.commons:commons-dbcp2:jar:2.7.0</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.apache.commons:commons-dbcp2:jar:2.7.0/org.apache.commons:commons-pool2:jar:2.7.0</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/antlr:antlr:jar:2.7.7</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/dom4j:dom4j:jar:1.6.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/dom4j:dom4j:jar:1.6.1/xml-apis:xml-apis:jar:1.0.b2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/commons-collections:commons-collections:jar:3.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/commons-dbcp:commons-dbcp:jar:1.4</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/commons-pool:commons-pool:jar:1.6</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/commons-logging:commons-logging:jar:1.1.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/javax.transaction:jta:jar:1.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.slf4j:slf4j-api:jar:1.7.30</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.jboss.logging:jboss-logging:jar:3.4.1.Final</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:jar:1.0.0.Final</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/net.sf.json-lib:json-lib:jar:jdk15:2.4</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/net.sf.json-lib:json-lib:jar:jdk15:2.4/commons-beanutils:commons-beanutils:jar:1.8.0</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/net.sf.json-lib:json-lib:jar:jdk15:2.4/commons-collections:commons-collections:jar:3.2.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/net.sf.json-lib:json-lib:jar:jdk15:2.4/commons-lang:commons-lang:jar:2.5</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/net.sf.json-lib:json-lib:jar:jdk15:2.4/net.sf.ezmorph:ezmorph:jar:1.0.6</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/net.sf.json-lib:json-lib:jar:jdk15:2.4/net.sf.ezmorph:ezmorph:jar:1.0.6/commons-lang:commons-lang:jar:2.3</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.jsoup:jsoup:jar:1.9.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.google.code.gson:gson:jar:2.8.6</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/commons-httpclient:commons-httpclient:jar:3.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/commons-httpclient:commons-httpclient:jar:3.1/commons-logging:commons-logging:jar:1.0.4</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.apache.httpcomponents:httpclient:jar:4.5.10</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.apache.httpcomponents:httpcore:jar:4.4.13</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/javax.mail:mail:jar:1.4.7</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/javax.mail:mail:jar:1.4.7/javax.activation:activation:jar:1.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.google.zxing:core:jar:3.3.0</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.google.zxing:javase:jar:3.3.0</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.google.zxing:javase:jar:3.3.0/com.beust:jcommander:jar:1.48</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.google.zxing:javase:jar:3.3.0/com.github.jai-imageio:jai-imageio-core:jar:1.3.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/net.sourceforge.jexcelapi:jxl:jar:2.6.12</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.alibaba:druid:jar:1.1.10</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.apache.poi:poi-ooxml:jar:3.9</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.apache.poi:poi-ooxml:jar:3.9/org.apache.poi:poi:jar:3.9</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.apache.poi:poi-ooxml:jar:3.9/org.apache.poi:poi-ooxml-schemas:jar:3.9</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.apache.poi:poi-ooxml:jar:3.9/org.apache.poi:poi-ooxml-schemas:jar:3.9/org.apache.xmlbeans:xmlbeans:jar:2.3.0</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.apache.poi:poi-ooxml:jar:3.9/org.apache.poi:poi-ooxml-schemas:jar:3.9/org.apache.xmlbeans:xmlbeans:jar:2.3.0/stax:stax-api:jar:1.0.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.mybatis:mybatis:jar:3.4.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.mybatis:mybatis-spring:jar:1.3.0</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.github.jai-imageio:jai-imageio-core:jar:1.3.0</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.qcloud:cos_api:jar:5.2.4</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.qcloud:cos_api:jar:5.2.4/joda-time:joda-time:jar:2.10.5</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.qcloud:cos_api:jar:5.2.4/com.fasterxml.jackson.core:jackson-databind:jar:2.10.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.qcloud:cos_api:jar:5.2.4/com.fasterxml.jackson.core:jackson-databind:jar:2.10.2/com.fasterxml.jackson.core:jackson-annotations:jar:2.10.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.qcloud:cos_api:jar:5.2.4/com.fasterxml.jackson.core:jackson-databind:jar:2.10.2/com.fasterxml.jackson.core:jackson-core:jar:2.10.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/commons-codec:commons-codec:jar:1.13</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/commons-fileupload:commons-fileupload:jar:1.3.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/commons-fileupload:commons-fileupload:jar:1.3.1/commons-io:commons-io:jar:2.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/commons-io:commons-io:jar:2.4</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/redis.clients:jedis:jar:3.1.0</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework.data:spring-data-redis:jar:2.2.4.RELEASE</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework.data:spring-data-redis:jar:2.2.4.RELEASE/org.springframework.data:spring-data-keyvalue:jar:2.2.4.RELEASE</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework.data:spring-data-redis:jar:2.2.4.RELEASE/org.springframework:spring-oxm:jar:5.2.3.RELEASE</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.alibaba:fastjson:jar:1.2.47</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.github.qcloudsms:qcloudsms:jar:1.0.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.github.qcloudsms:qcloudsms:jar:1.0.2/org.json:json:jar:20170516</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.github.qcloudsms:qcloudsms:jar:1.0.2/org.apache.httpcomponents:httpmime:jar:4.5.10</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.mongodb:mongo-java-driver:jar:3.11.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework.data:spring-data-mongodb:jar:2.2.4.RELEASE</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework.data:spring-data-mongodb:jar:2.2.4.RELEASE/org.springframework.data:spring-data-commons:jar:2.2.4.RELEASE</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework.data:spring-data-mongodb-cross-store:jar:1.10.10.RELEASE</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework.data:spring-data-mongodb-cross-store:jar:1.10.10.RELEASE/org.springframework:spring-aspects:jar:5.2.3.RELEASE</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework.data:spring-data-mongodb-cross-store:jar:1.10.10.RELEASE/org.aspectj:aspectjrt:jar:1.9.5</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework.data:spring-data-mongodb-cross-store:jar:1.10.10.RELEASE/org.slf4j:jcl-over-slf4j:jar:1.7.30</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.springframework.data:spring-data-mongodb-log4j:jar:1.10.17.RELEASE</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.googlecode.json-simple:json-simple:jar:1.1.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.googlecode.json-simple:json-simple:jar:1.1.1/junit:junit:jar:4.12</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.googlecode.json-simple:json-simple:jar:1.1.1/junit:junit:jar:4.12/org.hamcrest:hamcrest-core:jar:2.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.jdom:jdom:jar:1.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.aliyun:aliyun-java-sdk-core:jar:4.0.6</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.aliyun:aliyun-java-sdk-core:jar:4.0.6/javax.xml.bind:jaxb-api:jar:2.3.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.aliyun:aliyun-java-sdk-core:jar:4.0.6/javax.xml.bind:jaxb-api:jar:2.3.1/javax.activation:javax.activation-api:jar:1.2.0</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.aliyun:aliyun-java-sdk-core:jar:4.0.6/com.sun.xml.bind:jaxb-core:jar:2.1.14</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.aliyun:aliyun-java-sdk-core:jar:4.0.6/com.sun.xml.bind:jaxb-impl:jar:2.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.aliyun:aliyun-java-sdk-core:jar:4.0.6/javax.activation:activation:jar:1.1.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.aliyun:aliyun-java-sdk-dysmsapi:jar:1.1.0</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.google.guava:guava:jar:27.0.1-jre</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.google.guava:guava:jar:27.0.1-jre/com.google.guava:failureaccess:jar:1.0.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.google.guava:guava:jar:27.0.1-jre/com.google.guava:listenablefuture:jar:9999.0-empty-to-avoid-conflict-with-guava</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.google.guava:guava:jar:27.0.1-jre/com.google.code.findbugs:jsr305:jar:3.0.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.google.guava:guava:jar:27.0.1-jre/org.checkerframework:checker-qual:jar:2.5.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.google.guava:guava:jar:27.0.1-jre/com.google.errorprone:error_prone_annotations:jar:2.2.0</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.google.guava:guava:jar:27.0.1-jre/com.google.j2objc:j2objc-annotations:jar:1.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.google.guava:guava:jar:27.0.1-jre/org.codehaus.mojo:animal-sniffer-annotations:jar:1.17</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/net.coobird:thumbnailator:jar:0.4.8</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.aliyun.openservices:ons-client:jar:1.8.0.Final</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.xuxueli:xxl-job-core:jar:2.1.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.xuxueli:xxl-job-core:jar:2.1.2/com.xuxueli:xxl-rpc-core:jar:1.5.0</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.xuxueli:xxl-job-core:jar:2.1.2/com.xuxueli:xxl-rpc-core:jar:1.5.0/com.caucho:hessian:jar:4.0.63</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.xuxueli:xxl-job-core:jar:2.1.2/com.xuxueli:xxl-rpc-core:jar:1.5.0/com.xuxueli:xxl-registry-client:jar:1.1.0</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.xuxueli:xxl-job-core:jar:2.1.2/org.codehaus.groovy:groovy:jar:2.5.9</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.elasticsearch:elasticsearch-core:jar:6.8.6</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.elasticsearch:elasticsearch-secure-sm:jar:6.8.6</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.elasticsearch:elasticsearch-x-content:jar:6.8.6</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.elasticsearch:elasticsearch-x-content:jar:6.8.6/com.fasterxml.jackson.dataformat:jackson-dataformat-smile:jar:2.10.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.elasticsearch:elasticsearch-x-content:jar:6.8.6/com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.10.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.elasticsearch:elasticsearch-x-content:jar:6.8.6/com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:jar:2.10.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.apache.lucene:lucene-core:jar:7.7.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.apache.lucene:lucene-analyzers-common:jar:7.7.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.apache.lucene:lucene-backward-codecs:jar:7.7.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.apache.lucene:lucene-grouping:jar:7.7.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.apache.lucene:lucene-highlighter:jar:7.7.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.apache.lucene:lucene-join:jar:7.7.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.apache.lucene:lucene-memory:jar:7.7.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.apache.lucene:lucene-misc:jar:7.7.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.apache.lucene:lucene-queries:jar:7.7.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.apache.lucene:lucene-queryparser:jar:7.7.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.apache.lucene:lucene-sandbox:jar:7.7.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.apache.lucene:lucene-spatial:jar:7.7.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.apache.lucene:lucene-spatial-extras:jar:7.7.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.apache.lucene:lucene-spatial3d:jar:7.7.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.apache.lucene:lucene-suggest:jar:7.7.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.elasticsearch:elasticsearch-cli:jar:6.8.6</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.elasticsearch:elasticsearch-cli:jar:6.8.6/net.sf.jopt-simple:jopt-simple:jar:5.0.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/com.carrotsearch:hppc:jar:0.7.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/com.tdunning:t-digest:jar:3.2</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.hdrhistogram:HdrHistogram:jar:2.1.9</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch:elasticsearch:jar:6.8.6/org.elasticsearch:jna:jar:4.5.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch.client:elasticsearch-rest-client:jar:6.8.6</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch.client:elasticsearch-rest-client:jar:6.8.6/org.apache.httpcomponents:httpasyncclient:jar:4.1.4</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch.client:elasticsearch-rest-client:jar:6.8.6/org.apache.httpcomponents:httpcore-nio:jar:4.4.13</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch.plugin:parent-join-client:jar:6.8.6</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch.plugin:aggs-matrix-stats-client:jar:6.8.6</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch.plugin:rank-eval-client:jar:6.8.6</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch.plugin:lang-mustache-client:jar:6.8.6</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.elasticsearch.client:elasticsearch-rest-high-level-client:jar:6.8.6/org.elasticsearch.plugin:lang-mustache-client:jar:6.8.6/com.github.spullara.mustache.java:compiler:jar:0.9.3</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.apache.logging.log4j:log4j-api:jar:2.12.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.apache.logging.log4j:log4j-core:jar:2.12.1</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.alipay.sdk:alipay-sdk-java:jar:4.9.71.ALL</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.alipay.sdk:alipay-sdk-java:jar:4.9.71.ALL/com.alibaba:fastjson:jar:1.2.50</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/com.alipay.sdk:alipay-sdk-java:jar:4.9.71.ALL/org.bouncycastle:bcprov-jdk15on:jar:1.62</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.apache.rocketmq:rocketmq-client:jar:4.3.0</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.apache.rocketmq:rocketmq-client:jar:4.3.0/org.apache.rocketmq:rocketmq-common:jar:4.3.0</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.apache.rocketmq:rocketmq-client:jar:4.3.0/org.apache.rocketmq:rocketmq-common:jar:4.3.0/org.apache.rocketmq:rocketmq-remoting:jar:4.3.0</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.apache.rocketmq:rocketmq-client:jar:4.3.0/org.apache.rocketmq:rocketmq-common:jar:4.3.0/org.apache.rocketmq:rocketmq-remoting:jar:4.3.0/com.alibaba:fastjson:jar:1.2.29</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.apache.rocketmq:rocketmq-client:jar:4.3.0/org.apache.rocketmq:rocketmq-common:jar:4.3.0/org.apache.rocketmq:rocketmq-remoting:jar:4.3.0/org.apache.rocketmq:rocketmq-logging:jar:4.3.0</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.apache.rocketmq:rocketmq-client:jar:4.3.0/org.apache.rocketmq:rocketmq-common:jar:4.3.0/org.apache.rocketmq:rocketmq-remoting:jar:4.3.0/io.netty:netty-tcnative-boringssl-static:jar:2.0.28.Final</node>
            <node x="" y="">com.yeshi:goods.facade:jar:0.0.1-SNAPSHOT/org.apache.rocketmq:rocketmq-client:jar:4.3.0/org.apache.commons:commons-lang3:jar:3.9</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter:jar:2.2.4.RELEASE</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot:jar:2.2.4.RELEASE</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-autoconfigure:jar:2.2.4.RELEASE</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter-logging:jar:2.2.4.RELEASE</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter-logging:jar:2.2.4.RELEASE/ch.qos.logback:logback-classic:jar:1.2.3</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter-logging:jar:2.2.4.RELEASE/ch.qos.logback:logback-classic:jar:1.2.3/ch.qos.logback:logback-core:jar:1.2.3</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter-logging:jar:2.2.4.RELEASE/org.apache.logging.log4j:log4j-to-slf4j:jar:2.12.1</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter-logging:jar:2.2.4.RELEASE/org.slf4j:jul-to-slf4j:jar:1.7.30</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter:jar:2.2.4.RELEASE/jakarta.annotation:jakarta.annotation-api:jar:1.3.5</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter-json:jar:2.2.4.RELEASE</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter-json:jar:2.2.4.RELEASE/com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.10.2</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter-json:jar:2.2.4.RELEASE/com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.10.2</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter-json:jar:2.2.4.RELEASE/com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.10.2</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter-tomcat:jar:2.2.4.RELEASE</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter-tomcat:jar:2.2.4.RELEASE/org.apache.tomcat.embed:tomcat-embed-core:jar:9.0.30</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter-tomcat:jar:2.2.4.RELEASE/org.apache.tomcat.embed:tomcat-embed-el:jar:9.0.30</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter-tomcat:jar:2.2.4.RELEASE/org.apache.tomcat.embed:tomcat-embed-websocket:jar:9.0.30</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter-validation:jar:2.2.4.RELEASE</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter-validation:jar:2.2.4.RELEASE/jakarta.validation:jakarta.validation-api:jar:2.0.2</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter-validation:jar:2.2.4.RELEASE/org.hibernate.validator:hibernate-validator:jar:6.0.18.Final</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-starter-validation:jar:2.2.4.RELEASE/org.hibernate.validator:hibernate-validator:jar:6.0.18.Final/com.fasterxml:classmate:jar:1.5.1</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-web:jar:2.2.4.RELEASE/org.springframework:spring-web:jar:5.2.3.RELEASE</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-data-mongodb:jar:2.2.4.RELEASE</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-data-mongodb:jar:2.2.4.RELEASE/org.mongodb:mongodb-driver:jar:3.11.2</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-data-mongodb:jar:2.2.4.RELEASE/org.mongodb:mongodb-driver:jar:3.11.2/org.mongodb:bson:jar:3.11.2</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-data-mongodb:jar:2.2.4.RELEASE/org.mongodb:mongodb-driver:jar:3.11.2/org.mongodb:mongodb-driver-core:jar:3.11.2</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-test:jar:2.2.4.RELEASE</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.springframework.boot:spring-boot-test-autoconfigure:jar:2.2.4.RELEASE</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/com.jayway.jsonpath:json-path:jar:2.4.0</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/com.jayway.jsonpath:json-path:jar:2.4.0/net.minidev:json-smart:jar:2.3</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/com.jayway.jsonpath:json-path:jar:2.4.0/net.minidev:json-smart:jar:2.3/net.minidev:accessors-smart:jar:1.2</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/com.jayway.jsonpath:json-path:jar:2.4.0/net.minidev:json-smart:jar:2.3/net.minidev:accessors-smart:jar:1.2/org.ow2.asm:asm:jar:5.0.4</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/jakarta.xml.bind:jakarta.xml.bind-api:jar:2.3.2</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/jakarta.xml.bind:jakarta.xml.bind-api:jar:2.3.2/jakarta.activation:jakarta.activation-api:jar:1.2.1</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.junit.jupiter:junit-jupiter:jar:5.5.2</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.junit.jupiter:junit-jupiter:jar:5.5.2/org.junit.jupiter:junit-jupiter-api:jar:5.5.2</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.junit.jupiter:junit-jupiter:jar:5.5.2/org.junit.jupiter:junit-jupiter-api:jar:5.5.2/org.apiguardian:apiguardian-api:jar:1.1.0</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.junit.jupiter:junit-jupiter:jar:5.5.2/org.junit.jupiter:junit-jupiter-api:jar:5.5.2/org.opentest4j:opentest4j:jar:1.2.0</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.junit.jupiter:junit-jupiter:jar:5.5.2/org.junit.jupiter:junit-jupiter-api:jar:5.5.2/org.junit.platform:junit-platform-commons:jar:1.5.2</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.junit.jupiter:junit-jupiter:jar:5.5.2/org.junit.jupiter:junit-jupiter-params:jar:5.5.2</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.junit.jupiter:junit-jupiter:jar:5.5.2/org.junit.jupiter:junit-jupiter-engine:jar:5.5.2</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.junit.jupiter:junit-jupiter:jar:5.5.2/org.junit.jupiter:junit-jupiter-engine:jar:5.5.2/org.junit.platform:junit-platform-engine:jar:1.5.2</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.mockito:mockito-junit-jupiter:jar:3.1.0</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.assertj:assertj-core:jar:3.13.2</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.hamcrest:hamcrest:jar:2.1</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.mockito:mockito-core:jar:3.1.0</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.mockito:mockito-core:jar:3.1.0/net.bytebuddy:byte-buddy:jar:1.10.6</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.mockito:mockito-core:jar:3.1.0/net.bytebuddy:byte-buddy-agent:jar:1.10.6</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.mockito:mockito-core:jar:3.1.0/org.objenesis:objenesis:jar:2.6</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.skyscreamer:jsonassert:jar:1.5.0</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.skyscreamer:jsonassert:jar:1.5.0/com.vaadin.external.google:android-json:jar:0.0.20131108.vaadin1</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.springframework:spring-core:jar:5.2.3.RELEASE</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.springframework:spring-core:jar:5.2.3.RELEASE/org.springframework:spring-jcl:jar:5.2.3.RELEASE</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.springframework:spring-test:jar:5.2.3.RELEASE</node>
            <node x="" y="">org.springframework.boot:spring-boot-starter-test:jar:2.2.4.RELEASE/org.xmlunit:xmlunit-core:jar:2.6.3</node>
            <node x="" y="">org.apache.dubbo:dubbo:jar:2.7.5</node>
            <node x="" y="">org.apache.dubbo:dubbo:jar:2.7.5/com.alibaba.spring:spring-context-support:jar:1.0.5</node>
            <node x="" y="">org.apache.dubbo:dubbo:jar:2.7.5/io.netty:netty-all:jar:4.1.45.Final</node>
            <node x="" y="">org.apache.dubbo:dubbo:jar:2.7.5/org.yaml:snakeyaml:jar:1.25</node>
            <node x="" y="">org.apache.zookeeper:zookeeper:jar:3.4.6</node>
            <node x="" y="">org.apache.zookeeper:zookeeper:jar:3.4.6/jline:jline:jar:0.9.94</node>
            <node x="" y="">org.apache.curator:curator-framework:jar:2.13.0</node>
            <node x="" y="">org.apache.curator:curator-framework:jar:2.13.0/org.apache.curator:curator-client:jar:2.13.0</node>
            <node x="" y="">org.apache.curator:curator-framework:jar:2.13.0/org.apache.curator:curator-client:jar:2.13.0/org.apache.zookeeper:zookeeper:jar:3.4.8</node>
            <node x="" y="">org.apache.curator:curator-framework:jar:2.13.0/org.apache.curator:curator-client:jar:2.13.0/com.google.guava:guava:jar:16.0.1</node>
            <node x="" y="">org.apache.curator:curator-recipes:jar:2.13.0</node>
            <node x="" y="">com.101tec:zkclient:jar:0.10</node>
            <node x="" y="">com.101tec:zkclient:jar:0.10/org.apache.zookeeper:zookeeper:jar:3.4.6</node>
            <node x="" y="">org.javassist:javassist:jar:3.18.1-GA</node>
          </nodes>
          <notes />
          <edges />
          <settings layout="Hierarchic Group" zoom="1.0" x="10116.0" y="3705.0" />
          <SelectedNodes />
          <Categories />
          <SCOPE>All</SCOPE>
          <VISIBILITY>All</VISIBILITY>
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/src/test/java/com/blks/goods/GoodsApplicationTests.java">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="264">
          <caret line="16" column="13" selection-start-line="16" selection-start-column="13" selection-end-line="16" selection-end-column="13" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/pom.xml">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="198">
          <caret line="9" selection-start-line="9" selection-end-line="9" />
        </state>
      </provider>
    </entry>
    <entry file="jar://$MAVEN_REPOSITORY$/com/yeshi/common/0.0.1-SNAPSHOT/common-0.0.1-SNAPSHOT.jar!/com/yeshi/common/MongodbBaseDao.class">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="117">
          <caret line="22" column="5" lean-forward="true" selection-start-line="22" selection-start-column="5" selection-end-line="22" selection-end-column="5" />
        </state>
      </provider>
    </entry>
  </component>
  <component name="masterDetails">
    <states>
      <state key="ArtifactsStructureConfigurable.UI">
        <settings>
          <artifact-editor />
          <last-edited>goods:war</last-edited>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.2" />
                <option value="0.5" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
      <state key="FacetStructureConfigurable.UI">
        <settings>
          <last-edited>Spring</last-edited>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.2" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
      <state key="GlobalLibrariesConfigurable.UI">
        <settings>
          <last-edited>Python 3.7 interpreter library</last-edited>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.2" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
      <state key="JdkListConfigurable.UI">
        <settings>
          <last-edited>1.8</last-edited>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.2" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
      <state key="ModuleStructureConfigurable.UI">
        <settings>
          <last-edited>goods</last-edited>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.19521531" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
      <state key="ProjectJDKs.UI">
        <settings>
          <last-edited>1.8</last-edited>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.2" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
      <state key="ProjectLibrariesConfigurable.UI">
        <settings>
          <last-edited>Maven: com.alibaba.spring:spring-context-support:1.0.5</last-edited>
          <splitter-proportions>
            <option name="proportions">
              <list>
                <option value="0.64827585" />
              </list>
            </option>
          </splitter-proportions>
        </settings>
      </state>
    </states>
  </component>
</project>
service-goods/.mvn/wrapper/MavenWrapperDownloader.java
File was deleted
service-goods/.mvn/wrapper/maven-wrapper.jar
Binary files differ
service-goods/.mvn/wrapper/maven-wrapper.properties
File was deleted
service-goods/mvnw
File was deleted
service-goods/mvnw.cmd
File was deleted
service-goods/pom.xml
File was deleted
service-goods/src/main/java/com/blks/goods/GoodsApplication.java
File was deleted
service-goods/src/main/java/com/blks/goods/dao/taobao/TaoBaoCouponCacheDao.java
File was deleted
service-goods/src/main/java/com/blks/goods/service/remote/TaoBaoCouponCacheServiceRemote.java
File was deleted
service-goods/src/main/resources/application.yml
File was deleted
service-goods/src/test/java/com/blks/goods/GoodsApplicationTests.java
File was deleted
utils/src/main/java/org/yeshi/utils/StringUtil.java
@@ -6,6 +6,7 @@
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -299,4 +300,31 @@
        return lArr;
    }
    public static String concat(List list, String sperator) {
        if (list == null)
            return null;
        String str = "";
        for (Object obj : list) {
            str += obj + sperator;
        }
        if (str.endsWith(sperator))
            str = str.substring(0, str.length() - sperator.length());
        return str;
    }
    public static String concat(Object[] array, String sperator) {
        if (array == null)
            return null;
        String str = "";
        for (int i = 0; i < array.length; i++) {
            str += array[i] + sperator;
        }
        if (str.endsWith(sperator))
            str = str.substring(0, str.length() - sperator.length());
        return str;
    }
}